객체지향 프로그래밍은 절차지향 프로그래밍의 단점을 극복하기 위해 등장했다면, 함수형 프로그래밍은 객체지향 프로그래밍의 단점을 극복하기 위해 등장했다.
1. 절차지향 프로그래밍이란?
일이 진행되는 순서로 프로그래밍 하는 방법
장점
- 코드의 가독성이 좋다.
- 컴퓨터의 처리구조와 비슷해 실행 속도가 빠르다.
단점
- 각각의 코드가 순서에 민감하게 연결되어 있어, 유지보수 및 분석이 어렵다.
2. 객체지향 프로그램이란?
모든 데이터를 객체(Object)로 취급하고, 객체가 처리 요청을 받았을 때, 객체 내부에 있는 기능을 사용해 처리하는 방법
장점
- 코드의 재사용이 가능하다.
- 분석과 설계의 전환이 쉽다.
단점
- 처리 속도가 상대적으로 느리다.
- 설계에 많은 시간이 소요된다.
3. 함수형 프로그래밍이란?
"순수 함수"를 사용해, 상태를 제어하기보단, 빨리 처리하는데 초점을 둔 방법
순수 함수란?
- 함수의 입력이 주어지면, 항상 일관된 출력이 나오는 함수이다.
- 외부의 영향을 받지 않는 함수이다.
- 예제 코드
function func(a, b) {
return a + b;
function func(a, b) {
return a + b + c;
장점
- 함수의 동작부가 간결해지기 때문에, 객체지향 프로그래밍에 비해 코드 이해도와 가독성이 좋아진다.
단점
4. 함수형 프로그래밍과 객체지향 프로그래밍의 차이
- 함수형 프로그래밍에서는 함수(Function) 자체가 일급 객체가 되지만, 객체지향 프로그래밍에서는 클래스(또는 객체, Object)가 일급 객체가 된다.
일급 객체란?
- 다른 요소들과 아무런 차별이 없는 객체를 뜻한다.
즉, 함수의 인자로도 넘겨질 수 있고, 변수에 대입도 가능한 객체를 일급 객체라고 한다.
- 일급 객체의 명확한 정의는 아래와 같다.
1) 모든 일급 객체는 함수의 실질적인 매개 변수가 될 수 있다.
2) 모든 일급 객체는 함수의 반환값이 될 수 있다.
3) 모든 일급 객체는 할당의 대상이 될 수 있다.
4) 모든 일급 객체는 비교 연산(==, equals)을 적용할 수 있다.
- 객체지향 프로그래밍에서는 프로그램을 상호작용(interaction)하는 객체들의 집합으로 볼 수 있지만, 함수형 프로그래밍에서는 상태 값을 지니지 않는 함수들의 연속으로 볼 수 있다.
객체지향 프로그래밍의 경우
- 클래스 디자인과 객체들의 관계를 중심으로 코드 작성이 이루어진다.
- 따라서 상태, 멤버변수, 메서드 등이 긴밀한 관계를 가지고 있다.
- 특히 멤버변수가 어떤 상태를 가지고 있는가에 따라 결과가 달라진다.
함수형 프로그래밍의 경우
- 값의 연산 및 결과 도출 중심으로 코드 작성이 이루어진다.
- 함수는 인자로 받은 값을 별도로 처리하지 않고, 간결한 과정으로 처리하고 매핑하는데 주 목적을 둔다.
참고