객체지향 설계 안에 존재하는 세 가지 상호 연관된 관점
개념 관점
- 도메인 안에 존재하는 개념과 개념들 사이의 관계를 표현
- 실제 도메인의 규칙과 제약을 최대한 유사하게 반영
명세 관점
- 소프트웨어로 초점이 옮겨짐
- 살아 움직이는 객체들의 책임에 초점.
- 즉, 객체의 인터페이스를 바라보게 됨
- '무엇'을 할 수 있는가에 초점
구현 관점
- 실제 작업을 수행하는 코드와 연관
- 객체의 책임을 '어떻게' 수행할 것인가에 초점을 두고 필요한 속성과 메서드를 클래스에 추가
- 위 3가지 관점은 시간 순이 아니며, 동일한 클래스를 세 가지 다른 방향에서 바라보는 것을 의미
- 하나의 클래스 안에 세 가지 관점을 모두 포함하면서도 각 관점에 대응되는 요소를 명확하고 깔끔하게 드러낼 수 있어야 한다!
도메인 모델 -> 최종 코드 구현 과정 (요약)
- 구현하고자 하는 시스템에 속한 객체들을 식별해 도메인 모델을 설계한다
- 즉, 현실의 도메인을 단순화해서 도메인 모델로 만든다
- 어떤 타입이 도메인을 구성하는지와 타입을 사이에 어던 관계가 존재하는지를 파악하는 것이 중요하다
- 다음으로는 협력을 설계한다
- 중요한 것은 메시지가 객체를 선택하게 하는 것이다
- 시스템의 협력(책임)을 이행하기 위한 메시지를 식별하고 앞서 설계한 도메인 모델에서 해당 메시지를 수신하기에 적합한 객체를 찾아낸다 (어떤 객체를 은유해야 하는가?)
- 모든 책임이 이행될 때 까지 다시 요청을 위임할 객체를 찾고 메시지를 보내는 과정을 반복한다
- 인터페이스 정리하기
- 협력 설계가 완료되면 각 객체가 수신하는 메시지를 모아 인터페이스로 만든다
- 구현하기
- 앞서 정리된 인터페이스를 메서드로 구현한다
3단계
에서 설계된 인터페이스는 구현하는 과정에서 대부분 변경되고 새롭게 추가된다. 따라서 협력을 구상하는 단계에 시간을 너무 투자하지 말고 협력 구조가 떠오르거나 설계가 막힌다면 최대한 빨리 구현 단계로 넘어와 코드를 통해 설계에 대한 피드백을 받아야 한다.- 객체의 속성 또한, 구현 단계에 와서야 결정된다. (+ 인터페이스 설계 단계에서는 결정되지 않아야 한다.)
이 게시글은 스터디에서 [ 객체지향의 사실과 오해 / 조영호 ] 책을 읽고 중요한 내용을 잊지 않기 위해 정리한 게시글입니다. 요약 및 생략된 내용이 많고 제가 이해한 대로 다시 정리한 내용이라 보다 자세하고 정확한 설명은 책 구매를 권장합니다.