함수형 프로그래밍의 개념 및 OOP와의 차이점
함수형 프로그래밍과 순수 함수
함수형 프로그래밍이란 *사이드이펙트가 없는 순수 함수와 동작의 결과를 강조하는 프로그래밍 패러다임이다.
순수함수는 동일한 인자를 넣었을 때 동일한 출력값을 반환하므로 안정성과 생산성을 높일 수 있다.
OOP과 비교하여 함수의 동작부가 간결해 지기 때문에, 코드 이해도와 가독성에 큰 장점을 가지고있다.
여기서,
*순수 함수(Pure Function)란, 동일한 입력값을 넣었을 때 항상 동일한 리턴값을 반환하며 외부에 영향을 받지 않는 함수이다.
ex) 순수 함수가 아닌 경우
// 1.외부의 요인에 따라 리턴 값이 달라지는 경우
function func(a, b) {
return a + b + c; // 외부의 요인(변수) c 에 따라 리턴값이 달라짐
}
// 2. 인자를 직접 변경하여 Side-effect를 갖는 경우
function func(a, b) {
c = b; // 들어온 인자의 값이 직접 변경되어 리턴값이 달라짐
return a + b + c
}
* 단, 인자로 들어온 (외부의)값을 참조만 하고 새로운 값으로 만들어 리턴하는 경우는 순수 함수이다.
함수형 프로그래밍의 장단점
장점
-
사이드이펙트를 미연에 방지한다.
-
객체지향보다 코드가 간결하다.
-
비절차형이라 평가 시점(연산 시점)이 중요하지 않다.
-
테스트가 쉽다. (1회만으로 신뢰성 보장)
단점
-
외부 데이터 혹은 내부 데이터의 상태를 조작할 수 없다.
함수형 프로그래밍과 객체지향 프로그래밍의 차이
객체지향 프로그래밍과 함수형의 차이는 데이터(상태)를 다루는 개념과, ‘간결한 코드 작성’에 대한 관점 차이가 있다.
객체지향이 함수의 동작부를 *캡슐화해서 코드를 이해할 수 있게 한다면, 함수형 프로그래밍은 동작부를 최소화해서 코드 이해를 돕는다.
-
객체지향 프로그래밍의 경우, 클래스 디자인과 객체들의 관계를 중심으로 코드 작성이 이루어진다. 따러서 상태, 멤버변수, 메서드 등이 긴밀한 관계를 가지고 있다. 특히 멤버변수가 어떤 상태를 가지고있는가에 따라 결과가 달라진다.
-
함수형 프로그래밍의 경우, 값의 연산 및 결과 도출 중심으로 코드작성이 이루어진다. 함수 내부에서 인자로 받은 값을 별도로 저장하거나 하지 않고, 간결한 과정으로 처리하고 매핑하는데에 주 목적을 둔다.