목차
반응형
개요
- 부수효과를 없애라!
- 부소효과를 잘 관리해서 코드의 아무곳에나 있지않도록 하는것
- 계산, 액션
- 액션은 부수효과를 가진다.
- 배열, 리스트, 데이터베이스와 같은 컬렉션을 하나씩 처리하지않고, 한번에 처리한다.
- 항목이 독립적일때 가장 효과적이다!
ch1. 쏙쏙 들어오는 함수형 코딩에 오신것을 환영합니다
goal
- 함수형 사고가 무엇인지 설명한다.
- 다른 함수형 프로그래밍 책과 어떻게 다른지 알 수 있다.
- 함수형 프로그래머가 코드를 바라보는 방법을 알게된다.
함수형 프로그래밍은 무엇인가요?
- 부수효과 : 함수가 리턴값이외에 하는 모든일. 함수를 부를때마다 발생하기때문에 의도하지않게 부수효과가 발생할 수 있다.
- 순수함수 : 인자에만 의존하고 부수효과가 없는 함수이다.
함수형 프로그래밍 정의에서는 부수효과가 없는것이 특징이라고 말하고있지만, 현실적인 관점에서는 힘든부분이있다.
- 부수효과는 필요합니다.
- 함수형 프로그래밍은 부수효과를 잘 다룰수있다.
함수형 프로그래밍을 학문적 지식이 아닌, 기술과 개념으로 보기!
액션과 계산, 데이터 구분하기
액션
- 부르는 시점이나, 호출하는 횟수에 의존한다.
계산
- 부르는 시점이나, 횟수가 상관없다.
- 실행가능하다.
- 입력값으로 출력값을 만드는것.
- 언제, 어디서든 호출해도 동일입력-동일출력이다.
데이터
- 부르는 시점이나, 횟수가 상관없다.
- 실행 불가능하다.
- 이벤트에 대해 기록한 사실
함수형 사고가 무엇인가요?
- 액션과 계산, 데이터를 구분해서 생각하는것
- 일급 추상
ch2. 현실에서의 함수형 사고
💡 현실적인 문제에 함수형 사고를 적용하기 소프트웨어 구조를 잡는데 계층형 설계가 좋은 이유를 설명 액션을 타임라인으로 시각화
파트 1: 액션과 계산, 데이터
- 계층형설계
- 액션/계산/데이터 분리
변경 가능성에 따라 코드 나누기
- 계층형설계!
- 각 계층은 아래에 있는 계층을 기반으로 만들어진다.
- 각 계층에 있는 코드는 더 안정적인 기반위에 작성할 수 있다.
- 계층형설계는 일반적으로 비지니스규칙, 도메인규칙, 기술스택 계층으로 나눈다.
- 계층형 설계로 만든 코드는 테스트/재사용/유지보수가 쉽다
파트 2 : 일급추상
- 타임라인 다이어그램
- 액션이 시간순서에 따라 어떻게 실행되는지 볼 수 있다.
- 타임라인을 서로 맞추지않은 분산시스템은 예측 불가능한 순서로 실행된다.
- 타임라인 컷팅
- 여러 타임라인이 동시에 진행될때 서로 순서를 맞추는 방법
- 타임라인 컷팅은 고차동작으로 구현한다. (고차함수로 만든 동작)
- 일급함수 : 함수를 인자로 받는 함수
함수형 프로그래머는 유지보수를 잘 하기위해 계층형 설계를 사용한다.
각 계층은 코드의 변경가능성에 따라 나눈다.
ch3. 액션과 계산, 데이터의 차이를 알기
- 액션이 계산이될수있는지, 계산이 데이터가 될수있는지를 고민합니다
- 액션안에는 계산과 데이터, 또 다른 액션이 숨어있을지도 모른다.
- 데이터는 다른 영향을 주지않는 그냥 데이터이기때문에, 데이터 찾는일을 먼저 해야한다.
- 데이터는 이벤트에 대한 사실
- 데이터에 의미를 담는방법 : 데이터 구조!!
- 데이터베이스에서 메모리로 읽어오는건 액션
불변성
- 불변 데이터 구조를 만들기위해 두가지 원칙을 사용한다.
- 카피 온 라이트 : 변경할때 복사본을 만든다.
- 방어적 복사 : 보관하려고 하는 데이터의 복사본을 만든다.
- 액션을 호출하는 상부의 모든 함수는 전부다 액션이다!
- 액션은 코드 전체로 퍼져나간다.
액션
- 부수효과가 있는 함수
- 액션에서 결정이나 계획과 관련된 부분은 계산으로 빼낼수있다.
어니언 아키텍쳐(18장) 내부에 계산과 데이터만있고 가장 바깥쪽에 액션이 있는 구조
ch4. 액션에서 계산 빼내기
테스트를 개선하는 방법
- DOM 업데이트와 비지니스 규칙은 분리되어야한다.
- 전역변수가 없어야한다.
- 함수가 결과값을 리턴해야한다.
- 함수 출력은 return뿐만 아니라 전역변수의 값을 변경하는거도 포함!
- 함수에 암묵적 입력과, 암묵적 출력이있으면 액션이다.
ch5. 더 좋은 액션 만들기
- 암묵적 입력과 출력을 제거해서 재사용하기 좋은 코드를 만들기
암묵적 입출력은 적을수록 좋다
- 어떤 함수에 암묵적 입출력이있다면 다른 컴포넌트와 강하게 연결된 컴포넌트라고 할 수 있다.
- 다른곳에서 사용할 수 없기때문에 모듈이 아니다.
- 암묵적 입출력이있는 함수는 아무때나 실행할수없기때문에 테스트하기어렵다
- 설계는 엉켜있는 코드를 푸는것이다.
- 재사용이 쉽다
- 유지보수하기 쉽다
- 카피온라이트
질문
- context는 암묵적 입출력?!
- 불변성 유지하기위해 어떤 방식을 사용하는지?
'독서 > 쏙쏙 들어오는 함수형 코딩' 카테고리의 다른 글
[쏙쏙 들어오는 함수형 코딩] chapter 8-9. 계층형설계 (0) | 2024.08.02 |
---|