1. 협력하는 객체들의 공동체

1. 협력하는 객체들의 공동체

객체지향의 목표는 실 세계를 모방하는 것이 아니다. 오히려 새로운 세계를 창조하는 것이다. 소프트웨어 개발자의 역할은 단순히 실세계를 소프트웨어 안으로 옮겨 담는 것이 아니라 고객과 사용자를 만족시킬 수 있는 신세계를 창조하는 것이다.

"소프트웨어 시스템이 해결하려고 하는 실재는 잘해봐야 먼 친척밖에는 되지 않는다[Meyer 2000]"

버트란드 마이어(Bertrand Meyer)

요청과 응답을 통한 협업

사람들은 다른 사람과 협력하는 과정 속에서 특정한 역할(role)을 부여받는다. 카페테 리아에서 손님이 주문한 커피를 제조하기 위해 캐시어와 바리스타가 협력하는 과정 속 에는 '손님', '캐시어, 바리스타'라는 역할이 존재한다.

역할은 어떤 협력에 참여하는 특정한 사람이 협력 안에서 차지하는 책임이나 임무를 의 미한다. 어떤 사람이 손님이라는 역할을 맡았다면 그 사람은 커피를 주문하는 임무를 맡게 된다. 캐시어라는 역할을 맡은 사람은 손님으로부터 주문을 받아야만 한다. 바리 스타 역할을 맡은 사람은 주문된 커피를 제조해야 할 책임이 있다.

잠깐, 방금 책임(responsibility)이라는 단어를 사용했던가? 그렇다. 역할이라는 단어 는 의미적으로 책임이라는 개념을 내포한다. 선생님이라는 역할은 학생을 가르칠 책임 이 있음을 암시한다. 범죄자를 검거할 책임을 거부하는 사람에게 경찰관이라는 역할을 부여할 사람은 아무도 없을 것이다. 우리가 프로그래머라는 역할을 맡을 수 있는 이유 는 훌륭한 프로그램을 개발할 책임을 기꺼이 받아들이기 때문이다.

  • 여러 사람이 동일한 역할을 수행할 수 있다. 손님 입장에서 자신이 주문한 커피를 마실 수 있다면, 어떤 캐셔가 주문을 받는지는 중요하지 않다.
  • 역할은 대체 가능성을 의미한다. 손님 입장에서 켜는 대체 가능하다.
  • 책임을 수행하는 방법은 자율적으로 선택 가능하다. 요청을 받은 사람들은 요청을 처리하는 방법을 자유롭게 선택할 수 있다. 커피 제조를 요청 받은 바리스타는 자신만의 독특한 방법으로 커피를 제조할 수 있다. 동일한 요청을 받더라도 바리스타의 역할을 수행하는 사람들마다 서로 다른 방식으로 요청을 처리할 수 있다는 것이다. (이를 다형성이라고 한다.)
  • 한 사람이 동시에 여러 역할을 수행할 수 있다.

Comments

  • 객체 지향은 현실 세계를 모방한 것이 아니다.
  • 객체지향에서는 역할, 책임, 협력이 중요하다.