IV. 역할, 책임, 협력

"우리 모두를 합친 것보다 더 현명한 사람은 없다."
– 켄 블랜차드(Ken Blanchard)

이번 장은 제목 그대로 역할, 책임, 협력,
이 세 단어를 중심으로 객체지향의 본질을 풀어내는 장인 것 같다.
단어 자체는 익숙하지만, 이 단어들이 객체지향과 어떤 연결고리를 갖는지 설명한다.


인간은 이기적이기보단, 협력적이다

경제학 게임 하나를 고안하여 실행한 독일의 베르너 귀스 교수는 제안자와 응답자로 나누어 실험을 진행하였다.

이 실험의 결과로서, 인간은 “이득을 얻는 것”보다 공정함
자존심을 더 중시하며 행동한다고 한다.

이런 맥락은 객체지향에서도 그대로 이어지는데,
객체도 서로 협력하며 동작하는 존재다.

객체를 설계할 때 중요한 것은 객체의 내부 상태가 아니라
협력 안에서의 역할과 책임이라고 서술한다.


앨리스의 재판, 그리고 객체의 협력

두 번째로는 『이상한 나라의 앨리스』 속 재판 장면을 예시로 든다.

  • 왕은 토끼에게 “목격자를 부르라”고 요청
  • 토끼는 모자 장수에게 “입장하라”고 요청
  • 모자 장수는 “증언하라”는 요청에 응답

이처럼 객체들은 요청-응답을 주고받으며 하나의 목적(재판)을 이루기 위해 협력한다.

이 모든 흐름은 협력이라는 문맥 안에서 진행되고, 각 객체는 협력 속에서 자신의 역할과 책임을 갖는다.


역할이 주는 유연성과 추상화

같은 재판의 흐름이 모자 장수, 요리사, 앨리스로 증인만 바뀌어 반복된다. 이 반복되는 구조를 추상화하면 아래처럼 된다.

  • ‘판사’ 역할은 왕이나 여왕이 맡을 수 있고,
  • ‘증인’ 역할은 모자 장수, 요리사, 앨리스가 맡을 수 있다.

이렇게 역할을 기준으로 협력을 설계하면 시스템은 더 유연하고 재사용이 가능해진다.

역할은 “이 자리엔 이 역할을 수행할 수 있는 누구든 들어올 수 있음!”이라는 뜻이다.
행위 호환성이 있으면, 서로 다른 객체들도 동일한 역할을 수행할 수 있다.


객체지향 설계의 흐름

객체지향 설계의 핵심은 클래스나 데이터부터 시작하지 않는 것이다.

즉, 협력 속에서 필요한 책임을 먼저 정의하고,
그 책임을 수행할 객체와 메시지를 고민한 다음
그 객체가 필요한 데이터를 결정하고, 마지막에 클래스가 등장해야 한다.


3가지 핵심 설계 기법

1. 책임-주도 설계 (Responsibility-Driven Design)

  • 시스템 책임 → 더 작은 책임으로 분할 → 적절한 객체에 할당
  • 객체 간 요청을 통해 협력이 구성됨

2. 디자인 패턴 (Design Pattern)

  • 전문가들의 역할-책임-협력 템플릿
  • Composite 패턴, Observer, Strategy 등

3. 테스트-주도 개발 (TDD)

  • 테스트는 객체의 책임과 협력을 코드로 표현한 것
  • 단순히 테스트를 위한 것이 아니라, 책임을 설계하기 위한 강력한 도구임.

마치며...

객체지향 설계의 핵심이 결국 협력임을 다시 일깨워준다.
객체는 협력 속에서 의미를 갖고,
협력은 역할과 책임을 통해 구성된다.

객체를 설계할 때 “이 객체가 어떤 데이터를 갖고 있는가?” 보다는
“이 객체가 어떤 역할을 수행하고, 누구와 협력하는가?”
를 먼저 묻는 것이 객체지향적인 접근이 아닐까 생각한다.


profile
컴퓨터 공학을 공부중인 윤준석 입니다!

0개의 댓글

Powered by GraphCDN, the GraphQL CDN