12월 시작
- 정순씨와 함께 책 읽기를 시작했다. 12월 안에 다 읽는 것을 목표로 기록해보려 한다.
- 에릭 노드먼 지음/ 김은민 옮김
I. 데이터, 계산, 액션
ch 1. 함수형 코딩
함수형 프로그래밍
-
수학 함수를 사용하고 부수효과를 피하는 것이 특징인 프로그래밍 패러다임
-
부수 효과없이 순수 함수만 사용하는 프로그래밍 스타일
-> 일반적인 정의는 위와 같지만 이 책에서는 부수효과는 필요하고 부수 효과를 잘 다루는 방법도 많이 있다고 설명하고 있다.
이 책의 함수형 사고, 함수형 프로그래밍
- 함수를 다른 함수의 파라미터로 넘길 수도 있고 반환(return) 값으로 함수를 받을 수도 있는 프로그래밍 형태
- 함수형 사고는 함수형 프로그래머가 소프트웨어 문제를 해결하기 위해 사용하는 기술과 생각을 말함
- 함수형 프로그래밍에서 가장 중요한 것
- 데이터, 계산, 액션의 구분
- 일급 추상의 개념 (first-class abastraction)
ch 3. 데이터, 계산, 액션
데이터
- 이벤트에 대한 사실 (이메일 주소, 이름)
- 직렬화, 동일성 비교 가능, 자유로운 해석
계산
- 순수 함수 pure function, 수학 함수 (더하거나 곱하기, 문자열 합치기)
- 입력으로 출력을 계산
- 호출 시점이나 횟수에 의존하지 않고 동일한 입력값으로 부르면 항상 같은 결괏값을 돌려줌
- 테스트 용이, 조합하기 좋음
액션
- 부수효과, 부수 효과가 있는 함수, 순수하지 않은 함수 impure function
- 외부 세계에 영향을 주거나 받는 것을 말함 (이메일 보내기, ajax 요청 보내기)
- 실행 시점과 횟수에 의존
ch 4. 액션에서 계산 빼내기
액션
- 액션은 암묵적인 입력 또는 출력을 가지고 있음
- 함수형 원칙을 적용하면 액션은 줄어들고 계산을 늘릴 수 있음
액션에서 계산 빼내기
- 계산 코드를 찾아 빼내기
- 새 함수에 암묵적 입력과 출력 찾아내기
- 암묵적 입력은 인자로 암묵적 출력은 리턴값을 바꿈
예시
ch 5. 더 좋은 액션만들기
- 카피 온 라이트를 구현해 더 좋은 액션 만들기
예시
ch.6,7 불변성 유지
카피 온 라이트 copy-on-write
- 함수형 프로그래밍에서 불변 데이터가 필요하지만 계산에서는 변경 가능한 데이터에 쓰기를 할 수 없음
- 카피-온-라이트는 데이트를 불변형으로 유지할 수 있는 원칙
- 카피-온-라이트는 쓰기를 읽기로 바꿈 (복사본을 만들고(얕은 복사) 원본 대신 복사본을 변경)
- 카피-온-라이트를 통해 불변성을 유지하며 값 변경 가능
- 복사본 만들기
- 복사본 변경하기
- 복사본 리턴하기의 세 단계
얕은 복사
- 바뀌지 않는 값이라면 원본과 복사본이 데이터를 공유함
예시
방어적 복사
- 신뢰할 수 없는 코드를 사용하지만 불변성을 지키기 위해 사용
- 데이터를 변경할 수도 있는 코드와 불변성 코드 사이에 데이터를 주고받기 위한 원칙
- 데이터가 안전한 코드에서 나갈 때 복사
- 안전한 코드로 데이터가 들어올 때 복사하기
깊은 복사
- 중첩된 모든 객체나 배열을 복사
- 원본과 어떤 데이터 구조도 공유하지 않음
- 카피온라이트를 구현할 수 없을 때에만 사용
ch.8, 9 계층형 설계
다음장에서 계속
Reference
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Object/assign - Object.assign()