5. 책임과 메시지 명확한 책임과 역할을 지닌 참가자들이 협력에 참여해야 한다. 자율적인 책임 설계의 품질을 좌우하는 책임 객체지향 공동체를 구성하는 기본 단위는 '자율적'인 객체다. 자율적인 객체란 스스로 정한 원칙에 따라 판단하고 스스로의 의지를 기반으로 행동하는 객체다. 객체가 어떤 행동을 하는 유일한 이유는 다른 객체로부터 요청을 수신했기 때문이다. 객체지향 설계의 아름다움은 적절한 객체에게 할당하는 과정 속에서 드러난다. 적절한 책임이 자율적인 객체를 낳고, 자율적인 객체들이 모여 유연하고 단순한 협력을 낳는다. 너무 추상적인 책임 포괄적이고 추상적인 책임을 선택한다고 해서 무조건 좋은 것은 아니다. 수행 방법을 제한할 정도로 너무 구체적인 것도 문제지만 협력의 의도를 명확하게 표..
4. 역할, 책임, 협력 우리 모두를 합친 것보다 더 현명한 사람은 없다. 중요한 것은 개별 객체가 아니라 객체들 사이에 이뤄지는 협력이다. 훌륭한 객체지향 설계자는 객체들 간의 요청과 응답속에서 창발하는 협력에 초점을 맞춰 애플리케이션을 설계한다. 협력이 자리를 잡으면 저절로 객체 행동이 드러나고 뒤이어 적절한 상태가 결정된다. 협력 협력은 한사람이 다른 사람에게 도움을 요청할 때 시작된다. 자신에게 할당된 일이나 업무를 처리하던 중에 스스로 해결하기 어려운 문제에 부딪히게 되면 문제를 해결하는데 필요한 지식을 알고 있거나 도움을 받을 수 있는 누군가에게 도움을 요청하게 된다. 요청을 받은 사람은 일을 처리한 후 요청한 사람에게 필요한 지식이나 서비스를 제공하는 것으로 요청에 응답한다. 결과적으로 협력..
3. 타입과 추상화 일단 컴퓨터를 조작하는 것이 추상화를 구축하고, 조작하고, 추론하는 것에 관한 모든 것이라는 것을 깨닫고 나면 훌륭한 컴퓨터 프로그램을 작성하기 위한 중요한 전제 조건은 추상화를 정확하게 다루는 능력이라는 것이 명확해진다. 추상화를 통한 복잡성 극복 현실은 복잡하며 예측 불가능한 혼돈의 덩어리다. 현실에 존재하는 다양한 현상 및 사물과 상호작용하기 위해서는 우선 현실을 이해해야 한다. 불필요한 정보를 제거함으로써 단순함을 달성한것이 훌륭한 추상화다. 추상화란 현실에서 출발하되 불필요한 부분을 도려내려가면서 사물의 놀라운 본질을 드러나게 하는 과정이라고 할 수 있다. 어떤 추상화도 의도된 목적이 아닌 다른 목적으로 사용된다면 오도될 수 있다. 추상화를 하는 방법 구체적인 사물들 간의 공..
2. 이상한 나라의 객체 행동이 상태를 결정한다. 객체지향에 갓 입문한 사람들이 가장 쉽게 빠지는 함정은 상태를 중심으로 객체를 바라보는 것이다. 상태를 먼저 결정할 경우 캡슐화가 저해된다. 상태에 초점을 맞출 경우 상태가 객체 내부로 깔끔하게 캡슐화되지 못하고 공용 인터페이스에 그대로 노출되버릴 확률이 높아진다. 객체를 협력자가 아닌 고립된 섬으로 만든다. 객체가 필요한 이유는 어플리케이션의 문맥 내에서 다른 객체와 협력하기 위해서이다. 상태를 먼저 고려하면, 협력이라는 문맥에서 멀리 벗어난 객체를 설계하게 함으로써 자연스럽게 협력에 적합하지 못한 객체를 창조하게 된다. 객체의 재사용성이 저해된다. 재사용성은 다양한 협력에 참여할 수 있는 능력에서 나온다. 상태에 초점을 맞춘 객체는 다양한 협력에 참여..
1. 협력하는 객체들의 공동체 객체지향의 목표는 실세계를 모방하는 것이 아니다. 오히려 새로운 세계를 창조하는 것이다. 객체지향은 어떻게 표현해야하는가? 객체를 스스로 생각하고 스스로 결정하는 현실세계의 생명체에 비유하는 것은 상태와 행위를 '캡슐화'하는 소프트웨어 객체의 '자율성'을 설명한다. 현실 세계의 사람들이 암묵적인 약속기반으로 협력하며 목표를 달성해 나가는 과정은 '메시지'를 주고 받으면서 공동의 목표를 달성하기 위한 '협력'하는 객체들의 관계를 설명한다. 요청과 응답으로 구성된 협력 스스로 해결하지 못하는 문제와 마주치면 문제 해결에 필요한 지식을 알고 있거나 서비스를 제공해줄 수 있는 사람에게 도움을 요청한다. 요청을 받은 사람은 주..