요즘, 자바 공부를 하고 있어 객체 지향에 대해 관심이 많았다.
이 책을 보고 과연 내가 객체 지향을 정확히 이해한 것이 맞을까라는 의문이 들었고 객체 지향 프로그래밍을 이해하는데 중요한 개념들로 이루어져 있다는 이 책을 읽어보기로 결정했다.
📗📃 목차마다 중요하다고 생각하는 개념들을 정리한 것이다. 📃📗
(아래 내용은 책의 해당 부분에 대해 발췌하여 정리한 것이다.)
[1장] 협력하는 객체들의 공동체
클래스의 구조와 메서드가 아니라 객체의 역할, 책임, 협력에 집중하라. 객체지향은 객체를 지향하는 것이지 클래스를 지향하는 것이 아니다.
[2장] 이상한 나라의 객체
객체지향 설계자로서 우리의 목적은 현실을 모방하는 것이 아니다. 단지 이상한 나라를 창조하기만 하면 된다. 현실을 닮아야 한다는 어떤 제약이나 구속도 없다. 여러분이 창조한 객체의 특성을 상기시킬 수 있다면 현실 속의 객체의 이름을 이용해 객체를 묘사하라. 그렇지 않다면 깔끔하게 현실을 무시하고 자유롭게 새로운 세계를 창조하기 바란다. 앨리스를 매혹시킨 이상한 나라가 그런 것처럼 말이다.
[3장] 타입과 추상화
객체를 분류하는 기준은 타입이며, 타입을 나누는 기준은 객체가 수행하는 행동이라는 사실만을 기억하기 바란다. 객체를 분류하기 위해 타입을 결정한 후 프로그래밍 언어를 이용해 타입을 구현할 수 있는 한 가지 방법이 클래스라는 사실을 아는 것만으로도 충분하다.
결국 객체지향에서 중요한 것은 동적으로 변하는 객체의 ‘상태’와 상태를 변경하는 ‘행위’이다. 클래스는 타입을 구현하기 위해 프로그래밍 언어에서 제공하는 구현 메커니즘이라는 사실을 기억하라.
[4장] 역할, 책임, 협력
객체지향이 올바른 객체에 올바른 책임을 할당하는 것과 관련된 모든 것이라면 협력이라는 문맥 안에서 객체를 생각하는 것은 올바른 객체지향 애플리케이션을 구현하는 것과 관련된 모든 것이다. 일단 협력이라는 견고한 문맥이 갖춰지면 우리의 초점은 협력을 위해 필요한 책임의 흐름으로 옮겨진다. 그리고 협력에 필요한 책임을 결정하고 객체에게 책을 할당하는 과정을 얼마나 합리적이고 적절하게 수행했는지가 객체지향 설계의 품질을 결정한다.
객체지향 시스템에서 가장 중요한 것은 충분히 자율적인 동시에 충분이 협력적인 객체를 창조하는 것이다. 이 목표를 달성할 수 있는 가장 쉬운 방법은 객체를 충분히 협력적으로 만든 후에 협력이라는 문맥 안에서 객체를 충분히 자율적으로 만드는 것이다.
[5장] 책임과 메시지
책임의 자율성이 협력의 품질을 결정한다.
객체지향의 강력함을 누리기 위한 출발점은 책임을 자율적으로 만드는 것이다. 그리고 이것은 여러분이 선택하는 메시지에 따라 달라진다.
[6장] 객체 지도
안정적인 도메인 모델을 기반으로 시스템의 기능을 구현하라. 도메인 모델과 코드를 밀접하게 연관시키기 위해 노력하라. 그것이 유지보수하기 쉽고 유연한 객체지향 시스템을 만드는 첫걸음이 될 것이다.
[7장] 함께 모으기
인터페이스와 구현을 분리하라.
중요한 것은 여러분이 클래스를 봤을 때 클래스를 명세 관점과 구현 관점으로 나눠볼 수 있어야 한다는 것이다. 캡슐화를 위반해서 구현을 인터페이스 밖으로 노출해서도 안되고, 인터페이스와 구현을 명확하게 분리하지 않고 흐릿하게 섞어놓아서도 안된다. 결국 세 가지 관점 모두에서 클래스를 바라볼 수 있으려면 휼륭한 설계가 뒷받침돼야 하는 것이다.