반응형
객체지향 설계 안에 존재하는 세 가지 상호 연관된 관점
- 클래스는 세 가지 관점을 모두 수용할 수 있도록 개념, 인터페이스, 구현을 함께 드러내야 함
- 동시에 코드 안에서 세 가지 관점을 쉽게 식별할 수 있도록 깔끔하게 분리해야 함
개념 관점 (Conceptual Perspective)
- 사용자가 도메인을 바라보는 관점
- 실제 도메인의 규칙과 제약을 최대한 유사하게 반영
- 소프트웨어 클래스가 도메인 개념의 특성을 최대한 수용하면 변경 관리 및 유지보수 용이
명세 관점 (Specification Perspective)
- 사용자의 영역인 도메인을 벗어나 개발자의 영역인 소프트웨어 안에서 살아 숨쉬는 객체들로 초점이 옮겨짐
- 객체의 인터페이스를 바라봄 (인터페이스와 구현을 분리)
- 객체가 협력을 위해 '무엇'을 할 수 있는가에 초점
- '구현이 아니라 인터페이스에 대해 프로그래밍하라'
- 인터페이스를 수정하면 해당 객체와 협력하는 모든 객체에게 영향을 미침
∴ 최대한 변화에 안정적인 인터페이스를 만들기 위해서는 인터페이스를 통해 구현과 관련된 세부 사항이 드러나지 않게 해야 함 - 명세 관점이 설계를 주도하게 하면 설계의 품질이 향상될 수 있음
구현 관점 (Implementation Perspective)
- 객체들이 책임을 수행하는 데 필요한 동작하는 코드를 작성하는 데 초점
- 클래스의 내부 구현을 바라봄
- 책임을 '어떻게' 수행할 것인가에 초점
- 인터페이스를 구현하는 데 필요한 속성과 메서드를 클래스에 추가
- 클래스의 메서드와 속성은 외부의 객체에게 영향을 미쳐서는 안 됨 (철저하게 클래스 내부로 캡슐화돼야 함)
캡슐화를 위한 방법
- 인터페이스를 정하는 단계에서는 객체가 어떤 속성을 가지고 어떤 자료 구조로 구현됐는지 고려하지 마라.
- 객체에게 책임을 할당하고 인터페이스를 결정할 때는 가급적 객체 내부의 구현에 대한 어떤 가정도 하지 마라.
- 객체가 어떤 책임을 수행해야 하는지를 결정한 후에야 책임을 수행하는 데 필요한 객체의 속성을 결정하라.
반응형
'개발 도서 > 객체지향의 사실과 오해' 카테고리의 다른 글
[객체지향의 사실과 오해] 부록A : 추상화 기법 (0) | 2023.04.04 |
---|---|
[객체지향의 사실과 오해] 06장 : 객체 지도 (0) | 2023.03.31 |
[객체지향의 사실과 오해] 05장 : 책임과 메시지 (0) | 2023.03.13 |
[객체지향의 사실과 오해] 04장 : 역할, 책임, 협력 (1) | 2023.03.13 |
[객체지향의 사실과 오해] 03장 : 타입과 추상화 (0) | 2023.03.13 |