2. 이상한 나라의 객체

생성일
Jan 10, 2022 02:22 PM
태그
객체는 상태와 행동으로 이루어진다.
행동은 상태를 변화시키고, 상태로부터 영향을 받는다.
외부에서 객체의 상태를 직접 변경할 수 없다. 행동을 통해서만 제어 가능하다.
객체는 스스로의 행동에 의해서만 상태가 변경되는 것을 보장함으로 객체의 자율성이 보장된다.
 
객체는 주어진 책임을 완수하기 위해 다른 객체를 이용하고 다른 객체에게 서비스를 제공한다.
객체가 다른 객체와 협력하는 유일한 방법은 요청을 보내는 것이다.
 

행동이 상태를 결정한다.

객체지향에 갓 입문한 사람들이 쉽게 빠지는 함정은 상태를 중심으로 객체를 바라보는 것이다.
상태를 먼저 결정하고 행동을 나중에 결정하는 방법은 설계에 나쁜 영향을 미친다
  1. 상태를 먼저 결정할 경우 캡슐화가 저해된다. 상태에 초점을 맞출 경우 상태가 객체 내부로 깔끔하게 캡슐화되지 못하고 공용 인터페이스에 그대로 노출되어버릴 확률이 높다.
  1. 객체를 협력자가 아닌 고립된 섬으로 만든다. 객체가 필요한 이유는 앱 문맥 내에서 다른 객체와 협력하기 위해서이다. 불행하게도 상태를 먼저 고려하는 방식은 협력이라는 문맥에서 벗어나 객체를 설계함으로써 자연스럽게 협력에 적합하지 못한 객체를 창조하게 된다.
  1. 객체의 재사용성이 저하된다. 객체의 재사용성은 다양한 협력에 참여할 수 있는 능력에서 나온다. 상태에 초점을 맞춘 객체는 다양한 협력에 참여하기 어렵기 때문에 재사용성이 저하될 수 밖에 없다.
 
상태가 아닌 행동에 초점을 맞춰라. 객체는 협력하기 위해 존재한다.
객체지향 설계는 앱에 필요한 협력을 생각하고 협력에 참여하는 데 필요한 행동을 생각한 후 행동을 수행할 객체를 선택하는 방식으로 수행된다.
 
협력 안에서 객체의 행동은 결국 객체가 협력에 참여하면서 완수해야 하는 책임을 의미한다.
따라서 어떤 책임이 필요한가를 결정하는 과정이 전체 설계를 주도해야 한다. → 책임주도설계
 
 

객체지향은 현실 세계의 모방이 아님

소프트웨어 안에 구현된 객체는 실 세계와 다른 양상을 띤다. 큰 차이점은 현실 속에서는 수동적인 존재가 소프트웨어 객체로 구현될 때는 능동적으로 변한다. (트럼프 카드는 스스로 뒤집을 수 없음) - 의인화라 부르는듯
소프트웨어 안에 구축되는 객체지향 세계는 현실을 모방한 것이 아니다. 조금 참조할 뿐 궁극적인 목적은 현실과 전혀 다른 새로운 세계를 창조하는 것이다. 또한 객체지향 세계는 현실의 추상화가 아님. 오히려 현실의 객체보다 더 많은 특징과 능력을 보유한 객체들로 넘쳐난다.
 

Loading Comments...