이 시리즈는 "스칼라로 배우는 함수형 프로그래밍"을 TypeScript로 실습한 내용을 정리하고 있습니다.
1. 함수형 프로그래밍이란 무엇인가?
많은 사람들이 좋다고 여기는 생각을 논리적인 극한까지 밀어붙이는, 적용할 수 없을 것 같은 상황에도 적용하는 규율.
프로그램을 작성하는 방식에 대한 제약이지 표현 가능한 프로그램의 종류에 대한 제약이 아니다.
순수 함수 사용의 효능
- 모듈성 증가
- 모듈성은 test, 재사용, 병렬화, 일반화, 분석이 쉽다.
- 더 나아가서 버그가 생길 여지가 훨씬 적다.
부수 효과가 있는 프로그램의 단점
- testability가 떨어진다.
- 재사용이 어렵다.
- 함수 자체에 결제를 요청하는 부수효과가 있다면 여러건의 결제에 대해서 해당건수만큼 청구가 일어나게 된다.
- 해법: 부수효과를 제거하고 청구건을 하나의 값으로 돌려주기
- 청구건의 생성 문제를 청구건의 처리 또는 연동 문제와 분리시킴
- 재사용성과 합성 능력이 증가
- 프로그램의 행동에 관한 추론이 어려워진다.
순수 함수
- 결과값이 오직 입력값에 의해서만 결정되는 함수
- 입력이 주어지는 방식과 결과를 처리하는 방법을 신경쓰지 않는다.
- 입력은 함수의 인자로 주어지고 결과는 단지 함수 호출자에게 돌려주기만 할 뿐이다. 그 전 후의 과정에 대해서는 신경쓰지 않는다.
참조 투명성
- 표현식의 한 속성. 프로그램에 출현하는 어떤 표현식을 그 평가 결과로 바꾸어도 의미가 변하지 않는다면 그 표현식은 참조에 투명하다.
- 함수가 수행하는 모든 것이 함수가 돌려주는 값으로 대표된다는 불변 조건을 강제
- 계산이 등치 대 등치 치환을 통해서 진행 되므로 프로그램에 대한 등식적 추론이 가능하게 한다.
표현식
- 프로그램을 구성하는 코드 중 하나의 결과로 평가될 수 있는 임의의 코드 조각
치환 모형
기타 생각
- 부수효과를 함수 내부에서 직접 일으키지 말고 first-class 값으로 만들기
- 너무 간결한 코드는 읽기 어려울 수 있다.