Chapter 01
함수형 프로그래밍(FP)이란?
1. 수학 함수를 사용하고 부수 효과(Side effect)를 피하는 것이 특징인 프로그래밍 패러다임
2. 부수 효과없이 순수 함수만 사용하는 프로그래밍 스타일
부수 효과
함수가 리턴값 이외에 하는 모든 일을 말합니다.
대부분의 함수형 프로그래머는 부수효과를 가능한 사용하지 않으려고 합니다. 하지만 부수효과는 소프트웨어를 사용하는 근본적인 이유이므로 피해야만 하는 것은 아니죠.
프론트엔드 개발자가 자주 사용하는 `console.log()` 또한 부수효과 입니다.
순수함수
인자에만 의존하고 부수 효과가 없는 함수를 말합니다.
인자에만 의존한다 = 같은 인자를 넣으면 항상 같은 결과를 반환한다
실용적인 측면에서 함수형 프로그래밍 정의의 문제점
앞에서 언급했던 함수형 프로그래밍 정의는 학문적인 가치만 있을 뿐 실무에서는 지키기 어렵습니다. 여러 이유가 있지만 책에서는 3가지를 언급함
- 부수효과는 소프트웨어를 사용하는 이유이므로 반드시 필요함
- 함수형 프로그래밍은 부수 효과를 잘 다룰 수 있도록 도와주는 기법임
- 함수형 프로그래밍은 실용적임
함수형 프로그래밍의 중요한 3가지 개념
- 액션
- 계산
- 데이터
1로 갈수록 다루기 어렵고, 3으로 갈수록 다루기 쉽습니다.
액션은 실행 시점, 횟수 중 하나라도 의존하는 경우에 해당합니다. (자원을 사용하는 경우도 액션이라고 보면 됩니다)
다음과 같은 함수형 프로그래밍 방법을 사용해야합니다.
- 시간이 지남에 따라 안전하게 상태를 바꿀 수 있는 방법
- 순서를 보장하는 방법
- 액션이 정확히 한 번만 실행되게 보장하는 방법
계산은 입력값으로 출력값을 만드는 경우에 해당합니다. 어떤 함수가 입력값으로 출력값을 만들더라도, 순수하지 않으면 액션이 되는 것이죠. (외부 값에 의존하는 경우는 액션인 것이죠)
다음과 같은 함수형 프로그래밍 방법을 사용해야합니다.
- 정확성을 위한 정적 분석
- 소프트웨어에서 쓸 수 있는 수학적 지식
- 테스트 전략
데이터는 이벤트에 대해 기록한 사실입니다.
다음과 같은 함수형 프로그래밍 방법을 사용해야합니다.
- 효율적으로 접근하기 위해 데이터를 구성하는 방법
- 데이터를 보관하기 위한 기술
- 데이터를 이용해 중요한 것을 발견하는 원칙
Chapter 02
1. 액션과 계산, 데이터
변경 가능성에 따라 코드를 나누기
자주 바뀌는 것과 자주 바뀌지 않는 것을 구분하는 계층화 설계를 해보도록 합시다.
일반적으로 자주 바뀌는 것과 바뀌지 않는 것을 3단계로 나누어 비즈니스 규칙, 도메인 규칙, 기술 스택 3가지로 구분합니다.
각 계층은 그 아래 계층을 기반으로 만들어집니다. 이런 구조로 소프트웨어를 만들면 코드를 쉽게 변경할 수 있습니다.
비즈니스 규칙에 해당하는 코드는 의존성이 낮으므로 쉽게 변경이 가능하고, 기술스택에 해당하는 코드는 의존성이 높으므로 바꾸긴 어렵지만 자주 바뀌는 개념은 아닙니다.
2. 일급 추상
순차적인 프로그래밍을 분산적인 시스템으로 나눠서 처리를 하려고 하는 경우가 있습니다. 서비스가 커질수록 이는 당연한 것입니다.
그러나, 업무를 분산시스템에 맞긴다면 의존적인 코드가 꼬일 가능성이 존재합니다. 즉, 각각의 타임라인이 끝나는 시간이 매번 달라지기 때문에 액션 간의 실행 순서를 보장할 수 없습니다.
이러한 순서를 보장하기 위해서는 고차 동작을 통해 각각의 타임라인을 기다린 후에 나머지 작업을 시작할 수 있게 됩니다. 이렇게 타임라인의 시간을 맞추는 작업을 커팅이라고 합니다. 즉, 액션 간 협력을 위해 타임라인 커팅이라는 기술을 사용하는 것이죠.
고차동작은 고차함수로 만든 동작을 뜻합니다.