-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
80 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,80 @@ | ||
|
||
### 액션, 계산, 데이터 구분하기 | ||
|
||
- 코드를 읽을 때 액션과 계산, 데이터 중 어떤 것에 속하는지 잘 살펴보자 | ||
- 숨어있는 액션까지 잘 찾자 | ||
- 하나의 액션을 데이터, 계산, 액션으로 쪼개자 | ||
- 계속 나누다 보면 풍부한 모델링이 가능해진다 | ||
- 냉장고 확인하기 | ||
- 냉장실 확인하기 | ||
- 냉동실 확인하기 | ||
- 구입하기 | ||
- 장바구니 담기 | ||
- 계산하기 | ||
|
||
> 하나의 액션을 분리하는 과정이 OOP에서 단일책임원칙을 위해 메서드를 분리해 내는 과정과 비슷하다 생각함 | ||
> 액션, 계산, 데이터는 분리를 어떻게 할 것인가의 기준을 제공해주는 느낌 | ||
- 데이터는 데이터만 조합할 수 있다 | ||
- 데이터는 다른 영향을 주지 않는 그냥 데이터다. 데이터를 찾는 일을 먼저 해야 한다. | ||
- 데이터를 찾았다면 동작에 대해 많은 것을 알 수 있다 | ||
> 데이터를 찾았다면 동작에 대해 많은 것을 알 수 있다는 부분은 아직 감이 안 온다 | ||
|
||
### 데이터 | ||
|
||
- 이벤트에 대한 사실. 일어난 일의 결과를 기록한 것 | ||
- 의미 있게 처리한 입력 장치로부터 얻은 정보 | ||
- 데이터의 의미는 데이터 구조로 담을 수 있다. 데이터 구조로 도메인을 표현할 수 있다 | ||
- 데이터의 장점 | ||
- 직렬화 | ||
- 동일성 비교 | ||
- 자유로운 해석. 반드시 해석이 필요하다는 점은 단점이다 | ||
|
||
|
||
### 계산 | ||
|
||
- 입력값으로 출력값을 만드는 것 | ||
- 실행 시점과 횟수에 관계없이 항상 같은 입력값에 대해 같은 출력값으로 돌려준다 | ||
|
||
- 액션보다 계산이 좋은 이유 | ||
- 테스트하기 쉽다 | ||
- 조합해서 더 큰 계산을 만들 수 있다 | ||
- 동시에 실행, 실행 횟수 등을 신경쓰지 않아도 된다 | ||
- 단점 | ||
- 계산과 액션은 실행하기 전에 어떤 일이 발생할지 알 수 없다 | ||
|
||
|
||
### 액션 | ||
|
||
- 외부 세계에 영향을 주거나 받는 것. | ||
- 실행 시점과 횟수에 의존한다 | ||
|
||
#### 액션은 코드 전체로 퍼진다 | ||
|
||
- 액션을 부르는 함수도 액션이 된다 | ||
- 그 함수를 부르는 다른 함수도 액션이 된다 | ||
- 액션은 반드시 사용해야 하지만 제어하기 어렵때문에 가능한 적고, 작게 잘 제어해서 사용하는게 중요 | ||
- 이상적인 액션 구조 | ||
- 액션이 외부 세계와 상호작용하는 것을 제한 | ||
- 내부에 계산과 데이터만 있고 가장 바깥쪽에 액션이 있는 구조 -> 18장 어니언 아키텍처 | ||
|
||
> 어니언 아키텍처 기대된다 | ||
- 함수형 프로그래머는 액션이 호출 시점과 횟수에 덜 의존하도록 만드는 기술을 적용한다 | ||
|
||
#### 액션의 형태 | ||
|
||
- 함수 호출 | ||
- 메서드 호출 | ||
- 생성자 | ||
- 부르는 시점에 따라 다른 값을 가진다면 액션 | ||
- 표현식 | ||
- 공유 변수 라면 읽을 때마다 변경될 가능성이 있으므로 | ||
- 변수 참조 | ||
- 속성 참조 | ||
- 배열 참조 | ||
- 상태 | ||
- 변경 가능하면 액션이다. 다른 코드에 영향을 주기 때문 | ||
|
||
> 전반적으로 코드를 액션, 계산, 데이터로 분리하는 과정은 예측 가능하며 유지보수 하기 쉬운 코드로 귀결된다고 생각함 |