[일일 독서] 2023-03-18 (토)
p.131~153 변경 가능한 데이터를 읽는 것은 액션, 불변 데이터를 읽는 것은 계산. 불변 데이터를 구현하기 위해 필요한 연산은 그렇게 비용이 크지 않다. 문제가 있다면 추후에 최적화. 객체의 카피-온-라이트, Object.assign(). shallow copy, deep copy. 방어적 복사(defensive copy). 처음부터 복사된 데이터를 전달한다.
p.131~153 변경 가능한 데이터를 읽는 것은 액션, 불변 데이터를 읽는 것은 계산. 불변 데이터를 구현하기 위해 필요한 연산은 그렇게 비용이 크지 않다. 문제가 있다면 추후에 최적화. 객체의 카피-온-라이트, Object.assign(). shallow copy, deep copy. 방어적 복사(defensive copy). 처음부터 복사된 데이터를 전달한다.
p.87~130 중복은 항상 나쁜 것은 아니지만, 코드에서 나는 냄새다. (DRY) 암묵적 입력과 출력은 줄일수록 좋다. 재사용하기 쉽고 테스트하기 쉽고 유지보수하기 좋다. 계산도 관심사(?)에 따라서 분리할 수 있다. cart와 item의 구조를 모두 알고 있는 함수라면, 별도의 함수로 분리한다. 계산도 유틸리티, 장바구니, 비즈니스 규칙으로 나누는데 나중에 분리된 계층으로 구성한다. (재밌을 것 같다) 카피-온-라이트. 쓰기를 읽기로 바꾼다. 불변성을 유지한다. 1. 데이터 복사본 생성 2. 복사본 수정 3. 복사본 리턴
p.60~86 액션보단 계산, 계산보단 데이터. 액션에서 계산을 추출한다. 코드를 함수로 분리하고, 분리한 부분에서 함수를 호출한다. 암묵적 입력은 함수의 인자로, 암묵적 출력은 함수의 리턴값으로.
p.312~390 재능을 폭발시키는 52가지 학습의 기술을 각각 설명하고 있다. 당장 실천할 수 있는 것부터 연습을 하면 좋을 것 같다. 말은 쉬워 보이지만 의식적인 연습을 통해 잘 만들어야 할 것 같다. 이미 실천하고 있던 내용도 있어서 재밌었다.
p.28~59 액션, 계산, 데이터가 무엇인지 정의를 위주로 보다가 실제로 장보기, 쿠폰 보내기, 수수료 보내기 예제를 통해 구분했다. 액션은 외부 세계에 영향을 주는 것, 부수효과, 실행 시점과 횟수에 의존. 액션은 코드 전체로 퍼지기 때문에 매우 조심스럽게 사용해야 한다. 계산은 순수 함수, input이 같으면 output도 항상 동일하다. 테스트하기 쉽다, 조합하기 쉽다. 데이터는 이벤트에 대한 사실, 일어난 결과. 해석이 필요하다. 액션보단 계산을, 계산보단 데이터를.
~p.27 함수형 프로그래밍은 부수 효과를 피하고 부수 효과가 없는 순수 함수를 사용한다고 하지만 함수형 프로그래머는 부수 효과와 순수하지 않은 함수를 사용한다. 구분이 중요한 액션, 계산, 데이터 -> 액션 = 부수효과, IO, 계산 = 비즈니스 로직, 데이터 = 변수 처럼 매핑되는 느낌이었다. 유지보수를 위한 계층형 설계, 변경 가능성으로 레이어를 둠. 액션의 실행 순서를 보장하기 위한 타임라인 커팅, 설명을 보면 콜백 함수라고 느껴졌다.