[FP] - 함수형 프로그래밍?
함수형 프로그래밍은 제가 함수형 프로그래밍을 공부하면서 알게 된 내용을 기록하기 위해 만든 시리즈 입니다.
안녕하세요!😀
개발에 대해 공부하다 보면 구조적(SP), 객체지향(OOP), 함수형(FP) 3가지의 프로그래밍 패러다임을 접하게 됩니다.
앞으로는 함수형 프로그래밍이 무엇인지와 그에 관한 여러가지 내용들을 다뤄볼 예정입니다.
클린 아키텍처에서는 함수형 프로그래밍에 대해서 이렇게 설명합니다.
함수형 프로그래밍은 할당문에 대해 규칙을 부과한다.
우리의 밥 아저씨는 함수형 프로그래밍에 대해서 어떻게 설명할까요?
_Functional programming is programming without assignment statements.
함수형 프로그래밍은 할당문 없이 프로그래밍하는 것을 말합니다.
할당문 없는 프로그래밍이 어떤 의미일까요? 감이 잘 오지 않습니다. 예시와 함께 알아보겠습니다.
1부터 10까지의 수를 제곱해 출력하는 코드를 작성합니다.
우리는 for
루프를 돌면서 변수 i
에 할당
하고 있습니다. 프로그램이 반복되면서 변수 i
는 새로운 값을 가지게 됩니다.
이를 함수형 프로그래밍으로 변경하면 어떻게 될까요?
왼쪽부터 체이닝 기준으로 끊어서 읽어보면 1~10의 정수를 가진 목록에서 순차적으로 각 정수를 제곱하고 각각 출력한다.
입니다. 문장을 자세히 살펴보면 그저 각 함수의 정의를 연결했을 뿐이라는 것을 알 수 있습니다.
이를 참조 투명성
이라고 부릅니다. 🎉
참조 투명성
에 대해서 더 설명하면 어떤 표현식이나 함수가 그 자리에 있는 값으로 대체될 수 있다는 말입니다. 예시를 들어볼까요?
여기서 double(3)
을 호출하면 6이 반환됩니다. 이 경우에 double(3)
은 어디에서든 6으로 대체될 수 있습니다. 즉, double(3)
을 다른 표현식에서 6으로 대체해도 프로그램의 동작에는 변화가 없다는 것입니다.
많이 돌아왔는데요. 결국 함수형 프로그래밍은 함수를 파라미터나 반환값으로 사용하며, 참조 투명성을 지키는 것
이라고 설명할 수 있습니다.
함수형 프로그래밍을 공부하다 보면 여러가지 키워드를 마주치게 됩니다. 키워드들을 차차 다룰거지만 간단한 키워드 먼저 짧게 소개하겠습니다.
Side Effect (부수 효과)
사이드 이팩트란 함수가 외부의 상태를 변경하거나 다른 부수적인 작업을 수행하는 것을 말합니다.
위의 예시에서 increment()
는 외부에 변수 i의 상태를 변경합니다. 즉, 사이드 이팩트
를 발생시킵니다.
순수 함수
순수 함수는 간단하게 말하면 사이드 이팩트
없는 함수 입니다. 순수 함수는 동일한 입력에 대해 항상 동일한 출력을 반환하는 즉, 참조 투명성
을 보장하는 함수입니다.
위의 예시에서 increment()
는 값을 받아 1을 더해 반환하는 함수입니다. 이때 i
의 값이 같으면 항상 같은 값을 반환합니다. 또한 외부에 사이드 이팩트
를 발생시키지 않습니다.
순수 함수를 계산
이라고 표현하기도 합니다. 반대로 사이드 이팩트는 액션
이라고 표현하기도 합니다.
1급 객체 함수
1급 객체란 언어에서 다른 객체들에 일반적으로 적용 가능한 연산을 모두 지원하는 객체
를 말합니다. 보통 변수 할당, 인자로 전달 가능, 반환 가능 하면 1급 객체를 만족한다고 할 수 있습니다.
1급 함수는 결국 함수를 1급 객체로 다루는 것을 말합니다. 쉽게 말해서 함수를 값과 동일하게 취급할 수 있다
고 할 수 있습니다.
더 많은 키워드가 있지만 나머지는 차차 알아가도록 하겠습니다.