-
Notifications
You must be signed in to change notification settings - Fork 0
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
49 additions
and
2 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 |
---|---|---|
@@ -1,4 +1,51 @@ | ||
# 협력 | ||
> 작성자: | ||
> 작성자: 최선규 | ||
## 목차 | ||
## 목차 | ||
|
||
## 영화 예매 시스템 돌아보기 | ||
|
||
<center> | ||
|
||
![그림 3.1](https://github.com/luke0408/study_for_object/assets/98688494/33499d3c-98f7-4f1e-8cad-d266917fa087) | ||
|
||
</center> | ||
|
||
- 다양한 객체들이 영화 예매라는 기능을 구현하기 위해 `메시지`를 주고받으면서 `상호작용`하고 있다. | ||
- 이처럼 객체들이 애플리케이션의 기능을 구현하기 위해 수행하는 상호작용을 `협력`이라고 한다. | ||
- 객체가 협력에 참여하기 위해 수행하는 로직은 `책임`이라고 부른다. | ||
- 객체들이 협력 안에서 수행하는 책임들이 모여 객체가 수행하는 `역할`을 구성한다. | ||
|
||
## 협력 | ||
> 객체지향 시스템은 자율적인 객체들의 공동체이다. | ||
**[메시지 전송(message sending)]** | ||
- 두 객체 사이의 협력은 하나의 객체가 다른 객체에게 동움을 요청할 때 시작된다. | ||
- 그리고 이 도움을 요청하는 방법이 `메시지 전송`이다. | ||
- 메시지를 수신한 객체는 `메서드`를 실행해 요청에 응답한다. | ||
|
||
**[자율적인 객체들 간의 협력]** | ||
1. 자율적인 객체는 자신에게 할당된 책임을 수행하던 중에 필요한 정보를 알지 못하거나 외부의 도움이 필요한 경우 적절한 객체에게 메시지를 전송해서 협력을 요청한다. | ||
2. 메시지를 수신한 객체 역시 메시지를 처리하던 중에 직접 처리할 수 없는 정보나 행동이 필요한 경우 또 다른 객체에게 메시지를 전송해서 도움(협력)을 요청한다. | ||
3. 이처럼 객체들 사이의 협력을 구성하는 일련의 요청과 응답의 흐름을 통해 애플리케이션의 기능이 구현된다. | ||
|
||
**[설계를 위한 문맥]** | ||
- 애플리케이션 안에 어떤 객체가 필요하다면 그 이유는 단 하나여야 한다. 그 객체가 어떤 협력에 참여하고 있기 때문이다. 객체란 상태와 행동을 함께 캡슐화하는 실행 단위이다. | ||
- 객체의 행동을 결정하는 것은 객체가 참여하고 있는 협력이다. | ||
- 협력이 바뀌면 객체가 제공해야 하는 행동 역시 바뀌어야 한다. | ||
- 협력은 객체가 필요한 이유와 객체가 수행하는 행동의 동기를 제공한다. (즉, 객체의 행동을 결정하는 것이 협력) | ||
- 객체의 상태는 그 객체가 행동을 수행하는 데 필요한 정보가 무엇인지로 결정된다. | ||
- 문맥(context) : 협력이 객체를 구성하는 행동과 상태 모두를 결정한다. 따라서 협력은 객체를 설계하는 데 필요한 일종의 문맥을 제공한다. | ||
|
||
ex) Movie가 기본 요금인 fee와 할인정책인 discountPolicy라는 인스턴스 변수를 포함하는 이유는 `요금 계산이라는 행동을 수행`하기 위해서이다. | ||
|
||
```java | ||
public class Movie { | ||
private Money fee; | ||
private DiscountPolicy discountPolicy; | ||
|
||
public Money calculateMovieFee(Screening screening) { | ||
return fee.minus(discountPolicy.calculateDiscountAmount(screening)); | ||
} | ||
} | ||
``` |