메시지에 따라 객체지향을 설계하라

MinHwi·2022년 11월 24일
0
  • 공부 내용 : 객체지향의 사실과 오해 5장
  • 공부 기간 : 2022년 11월 22일 화요일

기억하고 싶은 것

객체지향이 유연한 설계와 재사용성을 높일 수 있는 이유는 협력을 수행하는 방법으로 메시지를 선택하기 때문이다. 메시지는 협력의 문맥에서 객체의 내부와 외부를 구분한다. 따라서 객체는 자율적인 책임을 지니게 된다. 캡슐화, 다형성, 낮은 결합도와 높은 응집도 등의 장점을 자율적인 책임에서 얻을 수 있다. 따라서 객체지향 시스템을 설계할 때는 협력의 문맥에서 메시지(what)을 결정하고 해당 책임을 수행할 객체(who)를 정한다. 객체를 설계할 때도 외부에 오픈할 메시지를 담는 인터페이스와 내부 구현(상태, 행동)을 구분해야 한다.

질문

  1. 자율적인 책임은 무엇을 정의하는가?
  2. 다형성 지탱하는 것은 무엇인가?
  3. 객체지향 설계의 중심은 왜 메시지가 되어야 하는가?
  4. 메시지를 먼저 결정하고 메시지에 적합한 객체를 선택하는 방식의 장점은?
  5. 공용 인터페이스를 구성하는 것은?
  6. 왜 인터페이스와 구현을 분리해야 하는가? 
  7. 왜 객체는 자율적인 책임을 지녀야 하는가?

1. 자율적인 책임은 무엇을 정의하는가?

자율적인 책임의 객체가 어떻게 해야 하는가가 아니라 무엇을 해야 하는가를 설명한다. 자율적인 책임은 객체가 협력을 위해 무엇을 해야 하는지 결정하지만 어떻게 해야 하는지는 결정하지 않는다. 책임을 수행할 방법은 객체가 자율적으로 선택한다.

2. 다형성 지탱하는 것은 무엇인가?

메시지이다. 다형성은 송신자와 수신자 간의 객체 타입에 대한 결합도를 메시지에 대한 결합도를 낮춤으로써 달성된다.

3. 객체지향 설계의 중심은 왜 메시지가 되어야 하는가?

협력이라는 문맥에서 개별 객체에 초점을 맞추기 위함이다. 협력 관계 속에서 다른 객체에게 무엇을 제공해야 하고 다른 객체로부터 무엇을 얻어야 하는가라는 관점에서 접근할 때만 훌륭한 책임을 수확할 수 있다.

4. 메시지를 먼저 결정하고 메시지에 적합한 객체를 선택하는 방식의 장점은?

송신자는 수신자가 어떤 객체인지는 모르지만 자신이 전송한 메시지를 잘 처리할 것이라는 것을 믿고 메시지를 전송한다. 메시지는 어떻게 보다는 무엇을 해야 하는지를 요청한다. 이러한 스타일은 객체를 자율적으로 만들고 캡슐화를 보장하며 결합도를 낮게 유지시킨다.

5. 공용 인터페이스를 구성하는 것은?

공용 인터페이스를 구성하는 것은 객체가 외부로부터 수신할 수 있는 메시지의 목록이다. 책임은 객체가 메시지를 수신했을 때 수행해야 하는 객체의 행동이다.

6. 왜 인터페이스와 구현을 분리해야 하는가?

소프트웨어의 변경으로 인한 파급효과을 줄이기 위함이다. 변경해도 무방한 안전 지대를 객체 내부의 구현으로 두고, 변경했을 경우 외부에 영향을 미치는 위험 지대를 구분한다. 객체 외부에 영향을 미치는 변경은 객체의 공용 인터페이스를 수정한다.

7. 왜 객체는 자율적인 책임을 지녀야 하는가?

  • 책임의 추상화 - 자율적인 책임은 세부적인 사항을 무시하고 의도를 드러나는 하나의 문장으로 표현하여 협력을 단순하게 만든다. 
  • 캡슐화 - 메시지를 수신하여 책임만 완수할 수 있다면 어떤 방법을 선택할지는 전적으로 객체의 권한이다. 협력의 양상을 외부의 요청과 내부의 수행으로 구분할 수 있다.
  • 낮은 결합도 - 책임이 자율적일수록 변경에 의해 수정되는 범위가 좁아지고 명확해진다. 
  • 높은 응집도 - 책임이 자율적일수록 객체의 역할을 이해하기 쉬워진다.
  • 다형성 - 책임이 자율적이면 역할을 대신할 수 있는 객체만 만들어 재사용할 수 있다. 협력이 유연해진다.
profile
딩가딩가 백엔드 개발자

0개의 댓글