쏙쏙 들어오는 함수형 코딩 Ch03
액션, 계산, 데이터
구분하기
모든 개발 과정에서 적용 가능
- 문제에 대해 생각할 때
- 코드를 작성할 때 특별히 주의해야할 부분(액션), 데이터로 처리해야 할 부분, 결정을 내려야 하는 부분(계산) 명확히 구분
- 코딩할 때
- 최대한 액션에서 계산 빼내기
- 계산에서 데이터 분리할 수 있는지 생각하기
- 액션이 계산이 될 수 있는지, 계산은 데이터가 될 수 있는지 고민하기
- 코드 읽을 때
- 액션은 시간에 의존하기 때문에 더욱 조심해야 함
- 숨어있는 액션까지도 찾아야 함
일상에서 액션/계산/데이터 구분; 장보기
타임라인
- 냉장고 확인 (액션)
- 확인하는 시점이 중요하므로 액션
- 냉장고에 있는 제품은 데이터; 현재 재고
- 운전해서 상점으로 가기 (액션)
- 필요한 것 구입하기 (액션)
- 현재 재고 (데이터)
- 필요한 재고 (데이터)
- 재고 빼기 (계산)
- 장보기 목록 (데이터)
- 목록에 있는 것 구입 (액션)
- 운전해서 집으로 오기 (액션)
- 음식을 냉장고에 보관하기 (액션)
타임라인을 크게 보면 전부 액션이지만
- 액션 안에 계산과 데이터로 나눌 수 있고, 각각의 액션도 세부 액션으로 나눌 수 있음
- 계산도 더 작은 계산과 데이터로 나누고 연결할 수 있음
- 데이터는 데이터만 조합할 수 있음
- 데이터 찾는 일을 먼저 해야, 동작에 대해 많은 것을 알 수 있음
- 계산 단계가 있지만 잘 보이지 않는 이유는 계산이 우리 사고 과정에 녹아있기 때문
데이터
- 의미를 담는 방법: 자료구조 활용
- 불변성
- copy-on-write: 변경할 때 복사본 만들기
- 방어적 복사 defensive copy: 보관하려고 하는 데이터의 복사본 만들기
- 데이터로 할 수 있는 것
- 직렬화
- 동일성 비교
- 자유로운 해석/활용
계산 (순수함수/수학함수)
- 의미를 담는 방법: 연산
- 액션보다 계산이 좋은 이유
- 테스트하기 쉽다
- 기계적 분석이 쉽다; 정적 분석 - 자동화 분석
- 조합하기 좋다; 계산을 조합해 더 큰 계산 만들기
액션 (순수하지 않은 함수/부수효과 함수)
- 의미를 담는 방법: 외부 세상에 영향을 주는 일
- 다루기 힘들지만, 액션은 꼭 써야 함
액션을 잘 사용하는 방법
- 가능한 적게 사용; 액션 대신 계산을 사용할 수 있는지 고민
- 가능한 작게 만들기; 액션에서 액션과 관련 없는 코드는 모두 제거
- 외부 세계와 상호작용하는 것을 제한; 어니언 아키텍처(👉 18장)
- 호출 시점/횟수에 의존하는 것을 제한
함수형 사고 적용하기
새로 코드 구현 순서
- 데이터
- 계산
- 잘 만들어진 시스템이라면, 추상적인 개념이 바뀌지 않는 한 계산은 바뀌지 않아야
- 액션
기존 코드에 적용
- 액션을 활용하는 함수도 액션
- => 액션은 코드 전체로 퍼진다
- 어떤 함수가 액션인지 명확하게 구분할 수 있어야
#develop #fp