안녕하세요. 이번 포스팅에서는 함수지향 언어, 절차지향 언어, 객체지향 언어의 차이점 및 예시 코드에 대해 알아보겠습니다. 절차 지향 언어의 단점을 보완해 객체 지향언어가 발전했고, 객체 지향언어의 단점을 보완하고자 함수지향 언어가 발전해 나가고 있습니다.
절차지향 vs 객체지향 vs 함수지향
절차지향
- 언어절차지향 언어는 컴퓨터 프로그램을 일련의 절차 또는 순서에 따라 실행하는 방식입니다.
- 프로그램을 작성할 때 데이터와 프로세스(함수 또는 서브루틴)를 분리하여 생각합니다.
- C, Pascal, Fortran 등이 있습니다.
코드 예시
위의 예시는 C 언어를 사용한 절차지향 프로그래밍입니다. 프로그램은 순차적인 절차에 따라 실행되며, 함수를 통해 작업을 수행합니다. 메인 함수에서 사용자로부터 이름을 입력 받고, 그 이름을 greet 함수로 전달하여 인사를 출력하는 간단한 프로그램입니다.
객체지향 언어
- 객체지향 언어는 현실 세계의 객체를 모델링하여 프로그램을 작성하는 방식입니다.
- 객체는 데이터와 그 데이터를 처리하는 메서드(함수)의 조합으로 이루어져 있습니다.
- 상속, 캡슐화, 다형성 등의 개념을 활용하여 유연하고 재사용 가능한 코드를 작성할 수 있습니다.
- Java, C++, Python 등이 있습니다.
코드 예시
위의 예시는 Java를 사용한 객체지향 프로그래밍입니다. Person 클래스를 정의하고, 인스턴스 변수로 이름(name)을 가지며, greet 메서드를 통해 인사를 출력합니다. 메인 메서드에서 Person 클래스의 인스턴스를 생성하고 greet 메서드를 호출하여 결과를 출력하는 예시입니다.
함수지향 언어
- 함수형 언어는 함수를 일급 객체로 취급하고, 상태 변경을 피하고 불변성을 지향하는 프로그래밍 패러다임입니다.
- 함수형 언어에서는 함수의 조합으로 복잡한 작업을 수행하며, 상태 변경 대신에 데이터를 변환하는 방식으로 프로그램을 작성합니다.
- 재귀, 고차 함수, 순수 함수 등의 개념을 중요시하며, 병렬 처리와 높은 수준의 추상화를 지원합니다.
- Python, Kotlin, Haskell, Lisp, Scala 등이 있습니다.
코드 예시
위의 예시는 JavaScript를 사용한 함수지향 프로그래밍입니다. greet 함수는 인자로 받은 이름을 템플릿 리터럴을 사용하여 인사를 출력합니다. main 함수에서는 사용자로부터 이름을 입력받고 greet 함수를 호출하여 결과를 출력하는 예시입니다.
각각의 예시에서 절차지향은 함수 호출의 연속으로 프로그램이 진행되는 것을 볼 수 있습니다. 객체지향은 클래스와 인스턴스 개념을 사용하여 데이터와 해당 데이터를 처리하는 메서드를 하나의 단위로 묶는 것을 볼 수 있습니다. 함수지향은 함수를 중심으로 프로그래밍이 진행되고, 데이터 변이보다는 데이터 변환을 강조하는 것을 볼 수 있습니다.
절차지향 언어의 단점 : 객체 지향 언어의 탄생
- 전역 변수의 남발: 전역 변수를 많이 사용하면 코드의 가독성과 유지보수가 어려워질 수 있습니다. 또한 다른 부분에서 전역 변수를 수정할 경우 예상치 못한 동작이 발생할 수 있습니다.
- 코드 재사용의 어려움: 절차지향 언어는 코드를 절차적으로 작성하기 때문에 코드 재사용이 객체지향 언어에 비해 어려울 수 있습니다.
- 유연성의 부족: 절차지향 언어는 데이터와 프로세스를 분리하기 때문에 유연성이 부족할 수 있습니다. 새로운 데이터 타입이 추가되는 경우에도 프로세스를 일일이 수정해야 합니다.
이러한 단점들 때문에 객체지향 언어가 탄생했습니다.
함수지향 vs 객체지향
함수지향 언어는 보통 객체지향언어의 특성을 그대로 가져가되, 함수지향적인 기능을 추가한 것입니다. 객체보다 더 작은 단위인 함수로 쪼개어 더 많은 이점이 탄생했습니다.
- 불변성과 부작용 감소: 함수형 프로그래밍은 상태 변경을 피하고 불변성을 지향하기 때문에 부작용이 감소합니다. 이는 코드의 예측 가능성과 디버깅의 용이성을 높여줍니다.
- 순수 함수와 테스트 용이성: 함수형 프로그래밍은 순수 함수를 중요시하며, 입력에 대해 동일한 출력을 보장합니다. 이로 인해 테스트가 쉬워지고 코드의 신뢰성이 향상됩니다.
- 모듈화와 재사용성: 함수형 프로그래밍은 함수를 모듈화하는 것을 중요시하기 때문에 코드의 재사용성이 높아집니다. 재사용 가능한 작은 함수들의 조합으로 복잡한 작업을 수행할 수 있습니다.
- 병렬 처리 용이성: 함수형 프로그래밍은 상태 변경을 제한하고 순수 함수를 사용하기 때문에 다수의 함수를 동시에 실행하여 병렬 처리를 쉽게 할 수 있습니다.
- 코드의 간결성과 표현력: 함수형 프로그래밍은 높은 수준의 추상화를 통해 코드를 간결하게 표현할 수 있습니다. 이로 인해 코드의 가독성과 유지보수성이 향상됩니다.
함수지향 프로그래밍은 특히 병렬 처리, 대규모 분산 시스템, 데이터 처리 및 과학적 계산과 같은 분야에서 강점을 발휘할 수 있습니다. 그러나 객체지향 프로그래밍은 코드의 가독성, 재사용성, 유지보수성과 같은 측면에서 효과적일 수 있으며, 소프트웨어의 설계와 모델링에 적합한 경우도 있습니다.
코드 예시
둘의 차이점을 원의 면적을 구하는 코드를 예시로 살펴보겠습니다.
1. JAVA (객체 지향) : 물론 지금 자바는 함수형 언어적 특징도 추가되었지만, 객체지향적으로 코드를 짠 것입니다.
2. Javascript (함수 지향)
둘의 차이를 보면, 확실히 함수 지향 언어의 코드가 훨씬 더 간결한 것을 볼 수 있습니다. map 함수나, lambda같은 함수 지향적 언어의 기능들을 잘 사용하면 객체지향보다 훨씬 더 짧게 코드를 구현할 수 있습니다.
'코딩 낙서' 카테고리의 다른 글
초보자도 파이썬으로 자동으로 일하자: pyautogui 소개 (6) | 2023.07.14 |
---|---|
깃허브(Git Hub)으로 협업하는 방법과 Best Practice (6) | 2023.07.09 |
안드로이드 앱 개발 언어 Kotlin vs Java (5) | 2023.07.04 |
파이썬(Python)을 왜 쓰는가? (0) | 2023.07.02 |
카카오기출 - 프렌즈4블록 (0) | 2023.06.26 |