Taking baby-developer steps

[객체지향의 사실과 오해] 4. 역할, 책임, 협력 - 4 협력이 객체의 모양을 결정한다 본문

CS 지식/객체지향

[객체지향의 사실과 오해] 4. 역할, 책임, 협력 - 4 협력이 객체의 모양을 결정한다

Surin Lee 2023. 11. 27. 19:35

객체 지향 입문자들은 데이터나 클래스를 중심으로 애플리케이션을 설계한다. 이는 협력이라는 문맥을 고려하지 않고 각 객체를 독립적으로 생각하기 때문이다. 그러나 다음을 명심해야한다.

  • 객체가 존재하는 이유는 행동을 통해 협력에 참여하기 위함이다. 객체에서 중요한 것은 데이터보단 객체의 행동, 즉 책임이다.
  • 객체지향은 클래스를 어떻게 구현할 것인가가 핵심이 아니다. 중요한 것은 객체가 협력 안에서 어떤 책임과 역할을 수행할 것인지를 결정하는 것이다.

 잘못된 객체지향설계의 예를 살펴보자. "토끼"의 인스턴스 모델링을 할 때 흰털에 빨간 눈, 귀여운 자태를 생각하고 그 모습을 기반으로 클래스를 개발 했다. 그러나 이 전형적인 토끼의 모습으로 소프트웨어 객체를 창조하는 것은 도움이 되지 않는다. "토끼"가 참여할 협력을 우선적으로 고려해야한다. 예를 들어 이상한 나라의 앨리스에 나오는 토끼는 "달린다" "늦었네 늦었어 라고 말하다" "시계를 본다"는 행동을 통해 "앨리스의 관심을 끄는" 역할로 협력에 참여하고 책임을 수행해야한다. 별주부 전의 흰토끼는 "거짓말을 한다"는 행동을 통해 "별주부를 속이는" 역할과 책임을 수행해야한다. 이런 맥락 속에서 전형적인 "귀여운" 토끼 아무 도움이 되지 않는다.

협력을 따라 흐르는 객체의 책임

 먼저 깔끔한 협력을 설계해야한다. 협력에 참여하는 객체들이 주고받을 요청과 응답의 흐름을 결정한다. 이 요청과 응답의 흐름은 객체가 협력에 참여하기 위해 수행될 책임이 된다.

 객체에게 책임을 할당하고 나면 책임은 객체가 외부에 제공할 행동이 된다. 행동이 결정 된 후, 그 행동을 수행하는 데 필요한 데이터가 결정된다. 협력에 참여하는데 행동 및 데이터가 결정된 후 클래스의 구현 방법을 결정한다.

 협력과 책임 결정 이후 클래스와 데이터를 고려한다.

 

올바른 객체에 올바른 책임을 할당 -> "객체지향"

협력 문맥 내 객체를 생각 -> 객체지향 애플리케이션 "구현"

 


참고문헌 : 객체지향의 사실과 오해 

Comments