컴퓨터공학

함수형 프로그래밍의 개념 및 OOP와의 차이점

코딩고블린 2020. 5. 14. 20:47

이미지 출처 : https://medium.com/@douglasbellonrocha/functional-object-oriented-programming-with-message-passing-71979ca9d097

 

함수형 프로그래밍과 순수 함수

 

함수형 프로그래밍이란  *사이드이펙트가 없는 순수 함수와 동작의 결과를 강조하는 프로그래밍 패러다임이다.

순수함수는 동일한 인자를 넣었을 때 동일한 출력값을 반환하므로 안정성과 생산성을 높일 수 있다.

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회만으로 신뢰성 보장)

 

단점

  • 외부 데이터 혹은 내부 데이터의 상태를 조작할 수 없다.

 

함수형 프로그래밍과 객체지향 프로그래밍의 차이

 

객체지향 프로그래밍과 함수형의 차이는 데이터(상태)를 다루는 개념과, ‘간결한 코드 작성에 대한 관점 차이가 있다.

객체지향이 함수의 동작부를 *캡슐화해서 코드를 이해할 수 있게 한다면, 함수형 프로그래밍은 동작부를 최소화해서 코드 이해를 돕는다.

 

  • 객체지향 프로그래밍의 경우, 클래스 디자인과 객체들의 관계를 중심으로 코드 작성이 이루어진다. 따러서 상태, 멤버변수, 메서드 등이 긴밀한 관계를 가지고 있다. 특히 멤버변수가 어떤 상태를 가지고있는가에 따라 결과가 달라진다.

  • 함수형 프로그래밍의 경우, 값의 연산 및 결과 도출 중심으로 코드작성이 이루어진다. 함수 내부에서 인자로 받은 값을 별도로 저장하거나 하지 않고, 간결한 과정으로 처리하고 매핑하는데에 주 목적을 둔다.