반응형
* 이 글은 책을 읽고 주관적인 생각과 함께 요약 정리한 글입니다.
제목 : 객체지향의 사실과 오해
저자 : 조영호
범위 : 05 책임과 메시지
요약 정리
- 객체가 행동을 하는 유일한 이유는 다른 객체로부터 요청(메시지)을 수신했기 때문이다.
- 요청을 처리하기 위해 객체가 수행하는 행동을 책임이라고 한다.
- 자율적인 책임은 객체가 '어떻게'해야 하는가가 아니라 '무엇'을 해야 하는가를 설명한다.
- 메서드 - 메시지를 처리하기 위해 내부적으로 선택하는 방법을 메서드라고 한다.
- 필요한 경우 메시지에는 인자가 함께 전달된다.
- 다형성
- 서로 다른 타입에 속하는 객체들이 동일한 메시지를 수신한다.
- 객체들은 서로 다른 메서드를 이용해 메시지를 처리할 수 있다.
- 즉, 동일한 메시지를 서로 다른 메서드(처리방법)를 이용해 처리한다.
- 다형성은 동일한 역할(책임)을 수행할 수 있는 객체들 사이의 대체 가능성을 의미한다.
- 객체 타입의 결합도를 메시지에 대한 결합도로 낮춘다.
- 다형성을 사용하면 메시지를 이해할 수 있는 어떤 객체와도 협력할 수 있는 유연한 확장 구조를 가진다.
- 메시지
- 독립된 객체의 상태와 행위에 대해 고민하지 말고, 시스템의 기능을 구현하기 위해 객체가 다른 객체에게 제공해야 하는 메시지에 대해 고민하라.
- 메시지가 객체를 선택하게 해야 하며, 메시지를 중심으로 협력을 설계해야 한다.
- 메시지가 수신자의 책임을 결정한다.
- 책임 주도 설계의 핵심은 어떤 행위가 필요한지를 먼저 결정한 후에 이 행위를 수행할 객체를 결정하는 것이다. 여기서 어떤 행위가 바로 메시지이다.
- 메시지를 먼저 결정함으로써 객체의 인터페이스를 발견할 수 있다.
- 인터페이스
- 특성 1. 사용법만 알고 있으면 내부 구조나 동작 원리를 몰라도 상호작용이 가능하다.
- 특성 2. 내부 구조나 동작 원리가 변경되어도 사용자에게 아무런 영향을 미치지 않는다.
- 특성 3. 인터페이스가 동일하면 어떤 대상과도 상호작용할 수 있다.
- 객체가 다른 객체와 상호작용하는 방법은 메시지이기 때문에 메시지가 인터페이스의 모양을 빚는다.
- 여기서 메시지를 수신하는 인터페이스가 공용 인터페이스이다.
- 너무 구체적인 인터페이스보다는 추상적인 인터페이스를 설계하는 것이 좋다.
- 최소 인터페이스 - 외부에서 사용하지 않는 인터페이스는 최대한 노출하지 말라.
- 공용 인터페이스
- 객체의 공용 인터페이스를 구성하는 것은 객체가 외부로부터 수신하는 메시지의 목록이다.
- 구현
- 객체에서 내부 구조와 작동 방식을 가리키는 용어는 '구현'이다.
- 공용 인터페이스에 포함되지 않는 모든 것이 구현에 포함된다.
- ex. 상태, 메서드를 구성하는 코드
- 인터페이스와 구현의 분리 원칙
- 공개되는 인터페이스와 감춰진 구현은 분리되어야 한다.
- 그 이유는 변경에 의한 파급효과를 최소화하기 위해서다. (변경을 관리하기 위함)
- 송신자와 수신자가 구체적인 구현 부분이 아니라 느슨한 인터페이스에 대해서만 결합되도록 만드는 것이다.
- 변경해도 무방한 것은 감춰진 구현이고, 변경하면 외부에 영향을 미치는 것이 공용 인터페이스이다.
- 즉, 객체 외부에 영향을 미치는 변경은 객체의 공용 인터페이스를 수정할 때 뿐이다.
- 변경될 만한 부분을 객체의 내부에 숨겨 놓는 것을 캡슐화라고 한다.
- 캡슐화(정보 은닉)
- 상태와 행위의 캡슐화 -> 데이터 캡슐화라고 한다.
- 사적인 비밀의 캡슐화 -> 불안정한 비밀(구현과 관련된 세부 사항)이 외부의 불필요한 간섭으로부터 격리한다.
- 책임의 자율성이 중요한 이유
- 첫째, 자율적인 책임은 협력을 단순하게 만든다. -> 책임이 적절하게 추상화된다.
- 둘째, 자율적인 책임은 외부와 내부를 명확하게 분리한다. -> 몰라도 되는 부분은 캡슐화, 외부 객체는 인터페이스에만 의존한다.
- 셋째, 책임이 자율적일 경우 내부 방법이 변경되더라도 외부에 영향을 미치지 않는다. -> 이는 변경의 파급효과가 적어지고 명확해진다. (두 객체 간의 결합도가 낮아진다.)
- 넷째, 자율적인 책임은 협력의 대상을 다양하게 선택할 수 있는 유연성을 제공한다. -> 설계가 유연해지고 재사용성이 높아진다.
- 다섯째, 책임들이 자율적일수록 객체의 역할을 이해하기 쉬워진다. -> 객체의 존재 이유가 명확해지고 객체의 응집도가 높아진다.
- 요약
- 책임이 자율적일수록 협력을 이해하기 쉽고,
- 객체의 외부와 내부의 구분이 명확해지며,
- 변경에 의한 파급효과를 제한할 수 있고,
- 유연하게 변경할 수 있는 동시에 다양한 문맥에서 재활용할 수 있다.
- 키워드
- 적절한 추상화
- 응집도 증가
- 결합도 감소
- 캡슐화 증진
- 인터페이스와 구현의 분리
- 설계의 유연성과 재사용성 향상
- 결론
- 객체지향의 강력함은 책임을 자율적으로 만드는 것에 달려있다.
- 그리고 이것은 메시지에 따라 달라진다.
하고 싶은 말
- 파이썬에서 인터페이스를 다뤄본 적이 없다 보니 그 개념을 이해하기 어려웠다.
- 메시지를 통해 책임을 자율적으로 만드는 것이 객체를 설계하는데 매우 중요하다는 것을 알게 되었다.
반응형
'나는 이렇게 본다 > 객체지향의 사실과 오해' 카테고리의 다른 글
객체지향의 세 가지 관점(도메인, 인터페이스, 구현) (0) | 2022.04.18 |
---|---|
도메인과 유스케이스, 유지보수하기 쉽고 유연한 객체지향 시스템 (0) | 2022.04.16 |
테스트 주도 개발은 객체지향 설계도구 (0) | 2022.04.01 |
추상화는 복잡성을 이해하기 쉬운 수준으로 단순화하는 것 (0) | 2022.03.29 |
행동이 상태를 결정한다. (0) | 2022.02.10 |