diff --git "a/\354\261\225\355\204\260_3/\354\230\244\355\230\234\354\204\261.md" "b/\354\261\225\355\204\260_3/\354\230\244\355\230\234\354\204\261.md" new file mode 100644 index 0000000..0904176 --- /dev/null +++ "b/\354\261\225\355\204\260_3/\354\230\244\355\230\234\354\204\261.md" @@ -0,0 +1,52 @@ +# 액션과 계산, 데이터의 차이를 알기 +* 함수형 프로그래머는 액션과 계산, 데이터를 구분한다 + + 액션, 계산, 데이터는 어디에나 적용 가능 + + 액션 안에 계산, 데이터 또 다른 액션이 숨어 있을지도 모름 + + 계산은 더 작은 계산과 데이터로 나누고 연결할 수 있다 + + 계산은 때로 '우리 머릿속에서' 일어난다 + - 계산이 잘 보이지 않는 이유는 우리 사고 과정에 녹아있기 때문 + +## 데이터 + +* 불변성 + + 카피 온 라이트 - 변경할 때 복사본을 만듦 + + 방어적 복사 - 보관하려고 하는 데이터의 복사본을 만듦 + +* 데이터의 장점 + + 직렬화 + + 동일성 비교 + + 자유로운 해석 + +* 단점 + + 해석이 반드시 필요하다는 점이 단점 + +## 계산 + +* 액션보다 좋은 이유 + + 테스트하기 쉬움 + + 기계적인 분석이 쉬움 + + 조합하기 좋음 + - 계산을 조합해 더 큰 계산을 만들 수 있음 (일급 계산) + +* 일반적으로 순수 함수, 수학 함수라고 부름 + +## 액션 + +* 액션은 다양한 형태로 나타난다 + +> 그렇다면 리액트 기반 현실 세계에서의 액션은 무엇일까요? +> - setState +> - useEffect? < effect에서 액션이라할 코드가 없다면? 그거부터 필요가 없는 이펙트인가? + +* 일반적으로 순수하지 않은 함수, 부수 효과 함수 등이라 부름 + +* 액션은 쉽지 않음 + + 액션은 소프트웨어를 실행하려는 중요한 이유 + - 함수형 프로그래머는 액션을 잘 사용함 + - 가능한 액션을 적게 사용 + - 액션을 가능한 작게 만듦 + - 외부 세계와 상호작용하는 것을 제한 + - 호출 시점에 의존하는 것을 제한 (덜 의존하도록 만듦) + + +