객체의 핵심은 역할, 책임, 협력
역할이란 어떤 공동체에서 특정한 사람이 차지하는 책임이나 임무를 의미한다.
역할은 책임의 개념을 내포한다. (선생님이라는 역할은 학생을 가르칠 책임이 있음을 암시함. 프로그래머는 개발의 책임). 역할과 책임은 협력이 원할하게 진행되는데 필요함.
객체에서 협력은 요청과 응답으로 이루어진다. 요청은 메시지로, 요청을 처리하는 방법은 메서드가 담당한다.
객체는 자율성이 있다. 내부적으로 어떻게 책임을 수행할 것인지는 객체가 자율적으로 알아서 할 일.
애플리케이션의 기능은 더 작은 책임으로 분할되고 책임은 적절한 역할을 수행할 수 있는 객체에 의해 수행된다. 결론적으로 시스템은 역할과 책임을 수행하는 객체로 분할되고 시스템의 기능은 객체 간의 연쇄적인 요청과 응답의 흐름으로 구성된 협력으로 구현된다.
객체는 충분히 협력적이어야 한다. 외부의 도움을 무시한 채 모든 것을 스스로 처리하려고 하는 전지전능한 객체는 내부적인 복잡도에 의해 자멸하고 만다.
객체는 자율적이어야 한다. 다른 객체의 명령에 복종하는 것이 아니라 요청에 응답할 뿐이다. 어떤 방식으로 응답할지는 객체 스스로 판단하고 결정한다. 요청에 응답하지 않을 수도 있다. 어떤 사물이 자신의 행동을 스스로 결정하고 책임진다면 우리는 그 사물을 자율적인 존재라고 말함.
객체는 상태와 행동을 같이 지닌 실체
객체의 자율성은 객체의 내부와 외부를 명확하게 구분하는 것으로 부터 나온다. 객체의 사적인 부분은 객체 스스로 관리하고 외부에서 일체 간섭할 수 없도록 차단해야 하며, 객체의 외부에서는 접근이 허락된 수단을 통해서만 객체와 의사소통해야 한다. 외부에선 객체가 무엇을 수행하는지는 알아도 어떻게 수행하는지에 대해선 알 수 없다.
객체지향을 지향하라
객체지향의 세계에서 클래스는 너무 과대평가 되어있다.
객체지향의 중심은 객체이지 클래스가 아니다.
많은 사람이 객체지향이라는 말을 들으면 조건반사적으로 클래스라는 단어를 떠올리고, 클래스를 정의하는 방법과 클래스 사이의 상속에 초점을 맞춘다.
클래스는 객체지향에서 중요한 도구이지, 핵심을 이루는 중심 개념이 아니다.
지나치게 클래스를 강조하는 프로그래밍 언어적 관점은 객체의 캡슐화를 저해하고 클래스를 서로 강하게 결합시킨다.
앱을 협력하는 객체의 공동체가 아닌 클래스로 구성된 설계도로 보는 관점은 유연하고 확장 가능한 애플리케이션의 구축을 방해한다.
훌륭한 객체지향 설계자가 되기 위해 거쳐야 할 도전은 코드를 담는 클래스의 관점에서 메시지를 주고받는 객체의 관점으로 사고의 중심을 전환하는 것이다.
중요한 것은 어떤 클래스가 필요한가가 아니라 어떤 객체들이 어떤 메시지를 주고받으며 협력하는가다.
객체지향의 핵심은 적절한 책임을 수행하는 역할 간의 유연하고 견고한 협력 관계를 구축하는 것이다.
클래스의 구조가 아니라 객체의 역할, 책임, 협력에 집중하라. 객체지향은 객체를 지향하는 것이지 클래스를 지향하는 것이 아니다.
Loading Comments...