OPP의 뒤를 잇는 PL 패러다임 중 하나인 함수형 프로그래밍에 대한 강의를 듣고, 저희 프로젝트에서 코드 작성할 때 차용할만한 개념들이 몇몇 있어서 작성해봤습니다.

<aside> 💡 이 영상를 요약 및 내 이해를 더해서 작성했습니다.

</aside>

Functional Programming (이하 FP)

FP.png

언어나 코딩 스타일의 측면에서 명령형 프로그래밍, 객체 지향 프로그래밍 등 여러 프로그래밍 패러다임이 많습니다. 함수형 프로그래밍도 그 중 하나이고, 최근에 핫한 인기있는 언어들(haskell, clojure ..)의 작동방식이기도 합니다.

함수형 프로그래밍 패러다임의 핵심은 하나입니다.

<aside> 💡

모든 코드를 Pure Function으로 나누어 처리한다.

</aside>

그럼 순수 함수(Pure Function)란 뭘까요?


Pure Function

Pure Function은 들어온 input만을 가지고 하나의 동작을 통해 output을 뱉으면서 Side Effect를 발생시키지 않는 함수입니다.

함수형 프로그래밍에서는 Pure Function만 사용합니다. 엄밀히 말하면 최대한 사용합니다. 함수형 프로그래밍 언어에서 Pure Function의 대우는 브라만 계급이라고 볼 수 있습니다. 이와 대조적으로 argument를 3개쯤 받고 Side Effect를 2개쯤 만들며 리턴값도 없는 함수는 수드라입니다.

예를 들어 콘솔함수를 생각해보면 이해가 쉽습니다. 아무것도 리턴하지 않고 콘솔만 찍는다면 return값은 없고 side effect가 발생한 상황입니다.

두번째 예로 전역변수를 변경하는 함수입니다. input으로 아무것도 들어오지 않아도 전역변수를 변경하는 함수는 output이 있을 수 있지만 Side Effect라고 봐야합니다.

const MY_NAME = "HJ"
const printName() => {
	conosole.log("HI I`m "+ MY_NAME)
}

이 함수는 전역변수 input을 따로 받지 않고 전역변수MY_NAME을 받습니다. 즉, 함수 내에서의 연산이 input에 의존적이지 않기 때문에 Pure하지 않습니다. 두번째로, 리턴값이 없다. 그 대신 콘솔을 찍는 동작을 하는데 이는 Side Effect에 해당합니다. 함수 이름에서 보이듯 콘솔을 찍는게 이 함수의 목적이라 하더라도 리턴값이 없다면 Pure하지 않은겁니다.

다음과 같이 바꾸면 FP 패러다임을 적용한 것이고 같은 기능을 합니다.

const MY_NAME = "HJ"
const getGreetMessage (name: string): string => {
	const message = "HI I`m" + name
	return message
}
console.log(getGreetMessage(MY_NAME))

FP, 그럼 어떻게 하나요?