본문 바로가기

Javascript/함수형 프로그래밍

함수형 프로그래밍 - 정의 그리고 순수함수


이 글은 유인동 개발자님의 강의를 듣고 강의를 토대로 정리한 글임을 미리 알려드립니다.

(유인동 개발자님께 허락을 받고 정리한 글입니다.)



함수형 프로그래밍이란?


함수형 프로그래밍이란 성공적인 프로그래밍을 위해 부수 효과를 미워하고 조합성을 강조 하는 프로그래밍 패러다임이다.


함수형 프로그래밍의 목적은 4단계에 걸쳐 말하고 있다.


  • 부수 효과를 미워한다. => 순수 함수를 만든다.
  • 조합성을 강조한다. => 모듈화 수준을 높인다.
  • 순수 함수  => 오류를 줄이고 안정성을 높인다.
  • 모듈화 수준이 높다. => 생산성을 높인다.


여기서 말하는 조합성이란 단어는 모듈의 독립성으로도 대체 할 수 있을거 같다.

결국 모듈의 수준을 높이기 위해 모듈의 독립성과 응집력을 높입니다. 모듈화 수준이 높아지면 얻을 수 있는 효과로는

기획 변경의 대응력을 높이고, 오류를 줄이고 다른 모듈에 영향이 가지 않도록 하여 생산성과 안정성을 확보 할 수 있습니다.



순수 함수?


순수 함수란 동일한 인자를 넣었을 때 항상 동일한 리턴값을 반환하고 외부에 영향을 받지 않는 함수를 말합니다.



위 코드를 봐주십시오.


add라는 Function에 동일한 값의 인자 a, b를 넣으면 어느 곳에서 호출을 하든 동일한 리턴 값을 반환하게 될 것입니다.

그런데 add2는 Function은 보시는 것과 같이 중간에 c라는 변수의 값이 바뀌고 나서 호출이 된다면 add2 Function에 동일한

인자값을 넣었다 해도 c라는 변수의 값이 바뀌기 전과 다른 결과가 나올 것입니다.


동일한 인자값을 받으면 동일한 리턴값을 반환하여야 한다. 


다시 한 번 설명하면 어디에서 호출 되든 결과가 동일 해야합니다. 


그리고 외부에 영향을 주지 말아야 합니다.

예제를 통해 설명 하겠습니다.



위 코드를 보면 add3 Function 이 호출 되기 전과 후에 c의 값이 달라지게 됩니다.

이와 같이 외부의 영향을 끼치는 것을 부수효과라고 하는데 부수효과가 있는 함수는 add3과 같은 함수는 순수함수라고 보기 어렵습니다.


다른 예제를 한 번 보겠습니다.



add4는 순수함수가 아니지만 add5는 순수함수입니다. 차이가 느껴지시나요?


add4는 함수 외부의 obj라는 오브젝트 값에 직접적으로 영향을 주고 있습니다. 만약 add4(obj, 10) 을 호출하게 되면 obj.val의 값은 10으로 바뀌게 되겠죠. 반면, add5(obj, 10) 을 호출하게 되면 obj를 참조만 할 뿐 영향을 주지는 않습니다. 결과도 동일한 결과가 나오게 되죠


순수함수의 조건을 다시 한 번 정리 해보겠습니다.


  • 동일한 인자값을 받으면 항상 동일한 리턴값을 반환하여야 한다.
  • 어디서 호출되든 동일한 결과를 보여줘야한다.
  • 외부에 영향을 주지도 받지도 말아야 한다.

이러한 특징들 덕분에 독립성이 높아지면서 앞에서 말한 어려 긍정적인 효과들을 볼 수 있는 것입니다.

이상으로 마치겠습니다.