본문 바로가기
반응형
오브젝트

3. 역할, 책임, 협력 - 1

by brightGarden02 2022. 10. 14.

오브젝트 책(챕터3: 역할, 책임, 협력)

목차

  1. 협력
    1. 영화 예매 시스템 돌아보기
    2. 협력
    3. 협력이 설계를 위한 문맥을 결정한다.

 

챕터3 역할, 책임, 협력에서

협력에 대해 다루려고 합니다.

 

객체지향 패러다임 관점에서 핵심은 역할(role), 책임(responsibility), 협력(collaboration)이다.

 

객체지향의 본질은 협력하는 객체들의 공동체를 창조하는 것이다.

객체지향 설계의 핵심은 협력을 구성하기 적절한 객체를 찾고 적절한 책임을 할당하는 과정에서 드러난다.

 

어플리케이션의 기능을 구현하기 위해

1.어떤 협력이 필요하고

2.협력을 위해 어떤 역할과 책임이 필요한지 먼저 고민

 

구현부터 초점을 맞추면 변경하기 어렵고 유연하지 못한 코드를 낳는 원인이 된다.

역할, 책임, 협력이 제자리를 찾지 못하면 응집도 높은 클래스, 중복 없는 상속 계층을 구현해도

어플리케이션의 침몰을 구원하지 못함

그 이유를 알아보겠다.

 

  1. 협력
    1. 영화 예매 시스템 돌아보기
      1. 다양한 객체들이 영화 예매라는 기능을 구현하기 위해 메시지를 주고받으면서 상호작용한다.
      2. 협력 = 상호작용
      3. 책임 = 객체가 협력에 참여하기 위해 수행하는 로직
      4. 역할 = 객체들이 협력 안에서 수행하는 책임들이 모여 객체가 수행
    2. 협력
      1. 협력은 객체지향의 세계에서 기능을 구현할 수 있는 유일한 방법이다. 두 객체 사이의 협력은 하나의 객체가 다른 객체에게 도움을 요청할 때 시작된다.
      2. 메시지 전송(message sending)은 객체 사이의 협력을 위해 사용할 수 있는 유일한 커뮤니케이션 수단이다.
      3. 객체 사이의 협력을 설계할 때는 객체를 서로 분리된 인스턴스가 아닌 협력하는 파트너로 인식해야 한다
      4. 자율적인 객체란 자신의 상태를 직접 관리하고 스스로의 결정에 따라 행동하는 객체다. 객체의 자율성을 보장하기 위해서는 필요한 정보와 정보에 기반한 행동을 같은 객체 안에 모아놓아야 한다. Movie가 자율적인 존재가 되기 위해서는 자신이 알고 있는 정보를 이용해 직접 요금을 계산해야한다.

        → 이것이 Screening이 Movie에게 요금을 계산하도록 위임하는 이유 자신이 할 수 없는 일을 다른 객체에게 위임하면 협력에 참여하는 객체들의 전체적인 자율성을 향상시킬 수 있다.

        → 결과적으로 객체를 자율적으로 만드는 가장 기본적인 방법은 내부 구현을 캡슐화하는 것.

        → 정리: 자율적인 객체는 자신에게 할당된 책임을 수행하던 중에 필요한 정보를 알지 못하거나 외부의 도움이 필요한 경우 적절한 객체에게 메시지를 전송해서 협력을 요청한다. 메시지를 수신한 객체 역시 메시지를 처리하던 중에 직접 처리할 수 없는 정보나 행동이 필요한 경우 또 다른 객체에게 도움을 요청한다. 이처럼 객체들 사이의 협력을 구성하는 일련의 요청과 응답의 흐름을 통해 어플리케이션의 기능이 구현된다.

    3. 협력이 설계를 위한 문맥을 결정한다.
      1. 객체란 상태와 행동을 함께 캡슐화하는 실행 단위이다.

      2. 어플리케이션 안에 어떤 객체가 필요하다면 그 이유는 단 하나.
        → 그 객체가 어떤 협력에 참여하고 있기 때문
        → 객체가 협력에 참여할 수 있는 이유는 협력에 필요한 적절한 행동을 보유하고 있기 때문
        → 결론적으로 객체의 행동을 결정하는 것은 객체가 참여하고 있는 협력이다.

      3. Movie 객체는 어떤 행동을 수행할 수 있어야 할까?
        Movie에 포함된 대부분의 메서드는 요금을 계산하는 행동과 관련된 것이다.
        이것은 Movie가 영화를 예매하기 위한 협력에 참여하고 있고 그 안에서 요금을 계산하는 책임을 지고 있기 때문이다. Movie의 행동을 결정하는 것은 영화 예매를 위한 협력이다.

      4. 객체의 행동을 결정하는 것이 협력이라면 객체의 상태를 결정하는 것은 행동이다.
        객체의 상태는 그 객체가 행동을 수행하는데 필요한 정보가 무엇인지로 결정된다.

        객체의 상태 ← 그 객체가 행동을 수행하는데 필요한 정보 객체는 자신의 상태를 스스로 결정하고 관리하는 자율적인 존재이기 때문에 객체가 수행하는 행동에 필요한 상태도 함께 가지고 있어야 한다.

        →Movie가 기본 요금인 fee와 할인 정책인 discountPolicy라는 인스턴스 변수를 상태의 일부로 포함하는 이유는 요금 계산이라는 행동을 수행하는데 이 정보들(fee, discountPolicy)이 필요하기 때문
public class Movie {

	private Money fee;
	private DiscountPolicy discountPolicy;

	public Money calculateMovieFee(Screening screening) {
		return fee.minus(discountPolicy.calculateDiscountAmount(screening));
}
}

 

  1. 상태는 객체가 행동하는데 필요한 정보에 의해 결정 행동은 협력 안에서 객체가 처리할 메시지로 결정 → 결과적으로 객체가 참여하는 협력이 객체를 구성하는 행동과 상태를 모두 결정한다 → 따라서 협력은 객체를 설계하는 데 필요한 일종의 문맥(context)를 제공한다

'오브젝트' 카테고리의 다른 글

3. 역할, 책임, 협력 - 3  (0) 2022.10.14
3. 역할, 책임, 협력 - 2  (0) 2022.10.14
2. 객체지향 프로그래밍  (0) 2022.10.14
1. 객체, 설계  (0) 2022.10.14
오브젝트  (0) 2022.10.14

댓글


반응형
반응형