5. 책임과 메시지

생성일
Jan 19, 2022 01:48 PM
태그
객체지향 공동체를 구성하는 기본 단위는 ‘자율적인’ 객체이다. 자율적인 객체란 스스로의 의지와 판단에 따라 각자 맡은 책임을 수행하는 객체를 의미함.
 
메시지는 객체들이 서로 협력하기 위해 사용할 수 있는 유일한 의사소통 수단이다. 객체가 메시지를 수신하 ㄹ수 있다는 것은 메시지에 대한 책임을 수행할 수 있다는 것을 의미함.
메시지를 처리할 방법은 자율적으로 선택할 수 있다.
 
다형성이란 서로 다른 유형의 객체가 동일한 메시지에 대해 서로 다르게 반응하는 것을 의미함. → 서로 다른 타입에 속하는 객체들이 동일한 메시지를 수신할 경우 서로 다른 메서드를 이용해 메시지를 처리할 수 있는 메커니즘
메시지의 수신자들이 동일한 요청을 서로 다른 방식으로 처리하더라도 메시지 송신자의 관점에선 이 객체들은 동일한 책임을 수행하는 것이다. 수신자들을 구별할 필요가 없으며 자신의 요청을 수행할 책임을 지닌 다는 점에서 모두가 동일함.
다형성을 동일한 역할을 수행할 수 있는 객체들 사이의 대체 가능성을 의미함.
다형성은 수신자의 종류를 캡슐화한다. 송신자와 수신자 간의 결합도를 메시지에 대한 결합도로 낮춤으로써 유연하고 확장가능하고 재사용성이 높아진다.
 
객체지향의 핵심은 메시지이다. 객체들간의 협력을 이루게 하는 유일한 방법이 메시지임.
메시지가 아니라 데이터를 중심으로 객체를 설계하는 방식은 객체의 내부 구조를 객체정의의 일부로 만들기 때문에 객체의 자율성을 저해한다.
훌륭한 객체지향 설계는 어떤 객체가 어떤 메시지를 전송할 수 있는가와 어떤 객체가 어떤 메시지를 이해할 수 있는가를 중심으로 객체 사이의 협력 관계를 구성하는 것이다.
협력이라는 문맥 안에서 필요한 메시지를 먼저 결정한 후에 메시지를 수신하기에 적합한 객체를 선택한다. 그리고 수신된 메시지가 객체의 책임을 결정한다.
 
인터페이스
어떤 두 사물이 마주치는 경계 지점에서 서로 상호작용할 수 있게 이어주는 방법이나 장치
객체의 인터페이스는 객체가 수신할 수 있는 메시지의 목록이다.
 
공용 인터페이스 → 내부에서만 접근 가능한 사적인 인터페이스와 구분하기 위해 외부에 공개된 인터페이스만을 공용인터페이스라고 칭함.
 
객체관점에서 생각하는 법
  1. 좀 더 추상적인 인터페이스 → 적당히 추상적인 수준의 메시지는 수신자의 자율성을 보장할 수 있다.
  1. 최소 인터페이스 → 외부에서 사용할 필요가 없는 인터페이스는 최대한 노출하지 말라
  1. 인터페이와 구현 간에 차이가 있다는 점을 인식
 
인터페이스와 구현의 분리 법칙
객체를 설계할 때 객체 외부에 노출되는 인터페이스와 객체의 내부에 숨겨지는 구현을 명확하게 분리해서 고려해한다는 것을 의미함.
객체 설계의 핵심은 객체를 두 개의 분리된 요소로 분할해 설계하는 것이다. → 외부에 공개되는 인터페이스와 내부에 감춰지는 구현
왜 중요한가? 소프트웨어는 항상 변경되기 때문이다. 객체가 수정되었을 때 어떤 객체가 영향을 받을지 판단하는 것은 어렵다. 객체의 모든 것이 외부에 공개되어 있다면 변경에 의한 파급효과가 커진다.
객체가 가져야 할 상태와 메서드 구현은 객체 내부에 속한다. 이 부분을 수정하더라도 객체 외부에 영향을 미쳐선 안된다. 객체 외부에 영향을 미치는 변경을 객체의 공용 인터페이스를 수정할 때 뿐이다.
 
캡슐화
객체의 자율성을 보존하기 위해 구현을 외부로부터 감추는 것
 
 

책임의 자율성이 협력의 품질을 결정한다.

  1. 자율적인 책임은 협력을 단순하게 만든다.
  1. 자율적인 책임은 외부와 내부를 명확하게 분리한다.
  1. 책임이 자율적일 경우 책임을 수행하는 내부적인 방법을 변경하더라도 외부에 영향을 미치지 않는다.
  1. 자율적인 책임은 협력의 대상을 다양하게 선택할 수 있는 유연성을 제공한다.
  1. 객체가 수행하는 책임들이 자율적일수록 객체의 역할을 이해하기 쉬워진다.
 
책임이 자율적일수록 적절하게 추상화되며, 응집도가 높아지고, 결합도가 낮아지며, 캡슐화가 증진되고, 인터페이스와 구현이 명확히 분리되며, 설계의 유연성과 재사용성이 향상된다.

Loading Comments...