협력하는 객체들의 공동체
Keywords
협력 - 특정한 책임을 수행하는 역할들 간의 연쇄적인 요청과 응답을 목표를 달성하는 것이 핵심이다.
책임 - 목표는 더 작은 책임으로
역할 - 책임을 수행할 수 있는 적절한 역할
협력, 역할, 책임
어떤 객체도 섬이 아니다.
다른 객체와도 적극적으로 협력한다.
시스템은 역할과 책임을 수행하는 객체로 분할되고, 시스템의 기능은 객체 간의 연쇄적인 요청과 응답의 흐름으로 구성된 협력으로 구현된다.
객체지향 설계라는 예술은 적절한 객체에게 적절한 책임을 할당하는 것에서 시작한다.
얼마나 적절한 책임을 선택하느냐가 애플리케이션의 아름다움을 결정한다.
역할은 유연하고 재사용 가능한 협력 관계를 구축하는 데 중요한 설계 요소다.
협력 속에 사는 객체
협력의 품질을 결정하는 것은 객체의 품질이다.
객체는 충분히 협력적이어야 한다. 다른 객체의 요청에 충실히 귀 기울이고 다른 객체에게 적극적으로 도움을 요청할 정도로 열린 마음을 지녀야 한다.
객체가 충분히 자율적이어야 한다. 자기 스스로의 원칙에 따라 어떤 일을 하거나 자기 스스로를 통제하여 절제하는 것이다.
객체지향 설계의 묘미는 다른 객체와 조화롭게 협력할 수 있을 만큼 충분히 개방적인 동시에 협력에 참여하는 방법을 스스로 결정할 수 있을 만큼 충분히 자율적인 객체들의 공동체를 설계하는 데 있다.
상태와 행동을 함께 지닌 자율적인 객체
객체의 내부는 객체 스스로 관리하고 외부에서 일체 간섭할 수 없게 차단해야 한다. 객체의 외부는 접근이 허락된 수단을 통해서만 객체와 의사소통 해야한다. 다른 객체가 무엇(what)을 수행하는지는 알 수 있지만 어떻게(how) 수행하는지에 대해서는 알 수 없다. 객체지향에서는 데이터와 프로세스를 객체라는 하나의 틀 안에 함께 묶어 놓음으로써 객체의 자율성을 보장한다.
협력과 메시지
객체지향의 세계에서는 오직 한 가지 의사소통 수단만이 존재한다. 메시지를 전송하는 객체를 송신자(sender)라고 부르고 메시지를 수신하는 객체를 수신자(recevier)라고 부른다.
메서드와 자율성
객체가 수신된 메시지를 처리하는 방법을 메서드(method)라고 부른다. 메시지를 수신한 객체가 실행 시간에 메서드를 선택할 수 있다는 점은 다른 프로그래밍 언어와 객체지향 프로그래밍 언어를 구분 짓는 핵심 특징 중 하나다.
메시지와 요청을 처리하기 위한 구체적인 방법인 메서드를 분리하는 것은 객체의 자율성을 높이는 핵심 메커니즘으로 캡슐화(encapsulation) 라는 개념과도 깊이 관련돼 있다.
객체의 본질
객체지향이란 시스템을 상호작용하는 자율적인 객체들의 공동체로 바라보고 객체를 이용한 시스템을 분할하는 방법이다.
자율적인 객체란 상태와 행위를 함께 지니며 스스로 자기 자신을 책임지는 객체를 의미한다.
객체는 시스템의 행위를 구현하기 위해 다른 객체와 협력한다. 각 객체는 협력 내에서 정해진 역할을 수행하며 역할은 관련된 책임의 집합이다.
객체는 다른 객체와 협력하기 위해 메시지를 전송하고, 메시지를 수신한 객체는 메시지를 처리하는 데 적합한 메서드를 자율적으로 선택한다.
객체를 지향하라
자바스크립트 같은 프로토타입 기반의 객체지향 언어에서는 클래스가 존재하지 않으며 오직 객체만이 존재한다. 프로토타입 기반의 객체지향 언어에서는 상속 역시 클래스가 아닌 객체 간의 위임 메커니즘을 기반으로 한다.
클래스의 구조와 메서드가 아닌 객체의 협력, 역할, 책임에 집중하라
Last updated
Was this helpful?