Skip to content

Commit

Permalink
docs: 챕터3 액션과 계산, 데이터의 차이 알기
Browse files Browse the repository at this point in the history
  • Loading branch information
gutenLEE committed Apr 20, 2024
1 parent e858a29 commit 0bde9ab
Showing 1 changed file with 80 additions and 0 deletions.
80 changes: 80 additions & 0 deletions 챕터_3/이유희.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@

### 액션, 계산, 데이터 구분하기

- 코드를 읽을 때 액션과 계산, 데이터 중 어떤 것에 속하는지 잘 살펴보자
- 숨어있는 액션까지 잘 찾자
- 하나의 액션을 데이터, 계산, 액션으로 쪼개자
- 계속 나누다 보면 풍부한 모델링이 가능해진다
- 냉장고 확인하기
- 냉장실 확인하기
- 냉동실 확인하기
- 구입하기
- 장바구니 담기
- 계산하기

> 하나의 액션을 분리하는 과정이 OOP에서 단일책임원칙을 위해 메서드를 분리해 내는 과정과 비슷하다 생각함
> 액션, 계산, 데이터는 분리를 어떻게 할 것인가의 기준을 제공해주는 느낌
- 데이터는 데이터만 조합할 수 있다
- 데이터는 다른 영향을 주지 않는 그냥 데이터다. 데이터를 찾는 일을 먼저 해야 한다.
- 데이터를 찾았다면 동작에 대해 많은 것을 알 수 있다
> 데이터를 찾았다면 동작에 대해 많은 것을 알 수 있다는 부분은 아직 감이 안 온다

### 데이터

- 이벤트에 대한 사실. 일어난 일의 결과를 기록한 것
- 의미 있게 처리한 입력 장치로부터 얻은 정보
- 데이터의 의미는 데이터 구조로 담을 수 있다. 데이터 구조로 도메인을 표현할 수 있다
- 데이터의 장점
- 직렬화
- 동일성 비교
- 자유로운 해석. 반드시 해석이 필요하다는 점은 단점이다


### 계산

- 입력값으로 출력값을 만드는 것
- 실행 시점과 횟수에 관계없이 항상 같은 입력값에 대해 같은 출력값으로 돌려준다

- 액션보다 계산이 좋은 이유
- 테스트하기 쉽다
- 조합해서 더 큰 계산을 만들 수 있다
- 동시에 실행, 실행 횟수 등을 신경쓰지 않아도 된다
- 단점
- 계산과 액션은 실행하기 전에 어떤 일이 발생할지 알 수 없다


### 액션

- 외부 세계에 영향을 주거나 받는 것.
- 실행 시점과 횟수에 의존한다

#### 액션은 코드 전체로 퍼진다

- 액션을 부르는 함수도 액션이 된다
- 그 함수를 부르는 다른 함수도 액션이 된다
- 액션은 반드시 사용해야 하지만 제어하기 어렵때문에 가능한 적고, 작게 잘 제어해서 사용하는게 중요
- 이상적인 액션 구조
- 액션이 외부 세계와 상호작용하는 것을 제한
- 내부에 계산과 데이터만 있고 가장 바깥쪽에 액션이 있는 구조 -> 18장 어니언 아키텍처

> 어니언 아키텍처 기대된다
- 함수형 프로그래머는 액션이 호출 시점과 횟수에 덜 의존하도록 만드는 기술을 적용한다

#### 액션의 형태

- 함수 호출
- 메서드 호출
- 생성자
- 부르는 시점에 따라 다른 값을 가진다면 액션
- 표현식
- 공유 변수 라면 읽을 때마다 변경될 가능성이 있으므로
- 변수 참조
- 속성 참조
- 배열 참조
- 상태
- 변경 가능하면 액션이다. 다른 코드에 영향을 주기 때문

> 전반적으로 코드를 액션, 계산, 데이터로 분리하는 과정은 예측 가능하며 유지보수 하기 쉬운 코드로 귀결된다고 생각함

0 comments on commit 0bde9ab

Please sign in to comment.