객체지향 설계 코드의 세 가지 관점
1. 개념 관점(Conceptual Perspective)
: 설계는 도메인 안에 존재하는 개념과 개념들 사이의 관계를 표현한다. 이 관점은 사용자가 도메인을 바라보는 관점을 반영한다. 따라서 실제 도메인의 규칙과 제약을 최대한 유사하게 반영하는 것이 핵심이다.
2. 명세 관점(Specification Perspective)
: 사용자의 영역인 도메인이 아닌 개발자의 영역인 소프트웨어로 초점이 옮겨진다. 명세 관점에서 프로그래머는 객체가 협력을 위해 무엇을 할 수 있는가에 초점을 맞춘다. 따라서 객체의 인터페이스를 바라보게 된다.
명세 관점과 구현 관점을 명확하게 분리하는 것에서 객체지향 설계가 시작된다.
3. 구현 관점(Implementation Perspective)
: 실제 작업을 수행하는 코드와 연관된 관점이다. 객체들이 책임을 수행하는 데 필요한 코드를 작성하는 것이 초점이다. 객체의 책임을 어떻게 수행할 것인가에 초점을 맞추며 인터페이스를 구현하는 데
필요한 속성과 메소드를 작성하게 된다.
앞의 세 관점이 개념-명세-구현 관점의 순서를 따라 개발이 이루어진다는 의미로 보일 수 있지만 그것이 아니라 동일한 클래스를 세 관점에서 각각 다르게 바라보는 것을 의미한다. 클래스가 은유하는 관점은 도메인 관점을, 클래스의 공용 인터페이스는 명세 관점을, 클래스의 속성과 메소드는 구현 관점을 반영한다.
현실과는 다르게 객체지향의 세계에는 수동적인 객체는 존재하지 않는다. 모든 객체가 능동적이고 자율적으로 마치 생명을 가진 존재처럼 스스로 행동한다.
ex) 현실 속의 메뉴판은 수동적으로 손님에게 읽혀지기만 하는 수동적인 존재이다. 하지만 객체지향 속 메뉴판은 손님의 질문에 스스로 메뉴를 찾는 능동적인 존재이다.
7장의 핵심은 바로 이 한 문장이다. 인터페이스와 구현을 명확하게 분리하라.
인터페이스에는 클래스의 안정적인 측면만을 드러내고, 구현에 세부 사항과 불안정한 측면을 드러내야한다.
후기
대학교 1학년때 객체지향 프로그래밍 수업을 들었다. 그때는 객체지향이 절차지향보다 발전된 개념으로, 단순히 객체에 중점을 두고 프로그램을 객체들의 상호작용으로 구현하라는 정도로 추상적으로 이해했다. 이 책을 읽고 나서는 왜 객체지향 설계가 중요한 것인지, 객체에 중점을 두는 이유가 무엇인지, 객체지향의 본질을 깨닫게 되었다. 마치 껍데기만 존재했던 속이 꽉 채워지는 기분이었다. 아직 부족하지만 이 책을 읽으며 배웠던 내용을 기억하며 객체지향 프로그래밍을 해나가야겠다고 다짐했다.
'Book Report' 카테고리의 다른 글
어서 오세요, 휴남동 서점입니다 (2) | 2022.04.05 |
---|---|
인공지능은 무엇이 되려 하는가 (12) | 2022.03.19 |
객체지향의 사실과 오해 - 6장 (0) | 2022.03.12 |
객체지향의 사실과 오해 - 5장 (0) | 2022.03.06 |
객체지향의 사실과 오해 - 4장 (0) | 2022.03.05 |