Skip to content

Commit 2187638

Browse files
committed
5장 추가
1 parent 07fc3bd commit 2187638

File tree

2 files changed

+67
-0
lines changed

2 files changed

+67
-0
lines changed
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
# 1. 책임 주도 설계를 향해
2+
### 데이터보다 행동을 먼저 결정하라
3+
너무 이른 시기에 데이터에 초점 맞추면, 캡슐화가 약화 -> 낮은 응집도와 높은 결합도 -> 변경에 취약
4+
5+
### 협력이라는 문맥 안에서 책임을 결정하라
6+
- 객체에게 할당된 책임의 품질은 협력에 적합한 정도로 결정
7+
- 책임은 객체의 입장이 아니라 객체가 참여하는 협력에 적합해야 한다. -> 객체의 책임을 어떻게 식별해야 하는가에 대한 힌트를 제공
8+
- 메시지가 클라이언트의 의도를 표현한다는 사실에 주목
9+
- 객체를 결정하기 전에 객체가 수신할 메시지를 먼저 결정하는 점
10+
11+
# 2. 책임 할당을 위한 GRASP 패턴
12+
어떤 책임을 할당해야 할 때 가장 먼저 고민해야 하는 유력한 후보는 도메인 개념
13+
![5-1](image.png)
14+
15+
### 정보 전문가에게 책임을 할당
16+
- 사용자에게 제공해야 하는 기능은 영화를 예매하는 것
17+
![1](image-1.png)
18+
19+
> 메시지를 수신할 적합한 객체는 누구인가?
20+
21+
- INFORMATION EXPERT 패턴은 객체가 자신이 소유한 정보와 관련된 작업을 수행하는 것을 표현
22+
- 정보는 데이터와 다름
23+
- 상영은 영화 정보, 상영 시간, 상영 순번처럼 영화 예매에 필요한 정보를 가지고 있기에 영화 예매 전문가이다.
24+
25+
![2](image-2.png)
26+
27+
그러나 예매 과정에서 필요한 가격 계산 작업은 Screening으로 불가능하다. 영화 한 편의 가격을 Movie가 가지고 있기 때문이다.
28+
29+
![3](image-3.png)
30+
31+
![4](image-4.png)
32+
33+
- 영화가 할인 가능한지 판단 후 할인 정책에 따라 할인 요금을 제외한 금액을 계산
34+
- 따라서, Movie는 할인 여부를 판단하라 메시지를 전송해서 외부의 도움을 요청
35+
36+
![5](image-5.png)
37+
할인 정보는 DiscountCondition이 가지므로 DiscountCondition에게 메시지를 전송
38+
39+
### 낮은 결합도
40+
![5-2](image-6.png)
41+
- 설계는 트레이드오프 활동
42+
- 왜 Movie가 DiscountCondition과 협력하는 방법을 사용할까?
43+
44+
- Movie와 DiscountCondition은 이미 결합돼 있기 때문에 Movie를 DiscountCondition과 협력하도록 하면 결합도를 추가하지 않아도 된다.
45+
```java
46+
public class Movie {
47+
private String title;
48+
private Duration runningTime;
49+
private Money fee;
50+
private List<DiscountCondition> discountConditions;
51+
52+
private MovieType movieType;
53+
private Money discountAmoint;
54+
private double discountPercent;
55+
}
56+
```
57+
58+
### 높은 응집도
59+
- Screening의 책임은 예매를 생성하는 것
60+
- 만약 Screening이 DiscountCondition과 협력하면, 영화 요금 계산이라는 책임도 떠안게 됨.
61+
- 이는 Screening이 할인 여부 판단, Movie에서 필요한 정보를 알게됨.
62+
Screening과 DiscountCondition이 협력하게 되면 Screening은 서로 다른 이유로 변경되는 책임을 젊어지게 되므로 응집도가 낮아짐
63+
64+
### 창조자에게 객체 생성 책임을 할당
65+
- 영화 예매 협력의 최종 결과물은 Reservation 인스턴스를 생성하는 것
66+
- Screening은 예매를 수행하기 때문에 Reservation의 창조자로 적합하다.
67+
31.5 KB
Loading

0 commit comments

Comments
 (0)