[오브젝트] 3장 왜 '역할', '책임', 협력'이 핵심인가?
by rowing0328※ 책 내용을 바탕으로 제 관점에서 풀어쓴 글입니다. 일부 내용이 다를 수 있습니다.
객체지향 설계, 왜 '역할·책임·협력'이 핵심인가?
개발을 하다 보면, "어떤 클래스에 어떤 메서드를 넣어야 하지"라는 고민을 자주 하게 된다.
하지만 그 이면에는 사실 "이 객체는 무슨 역할을 맡고, 무슨 책임을 지며,
다른 객체와 어떻게 협력할 것인가?"라는 더 근본적인 질문이 숨어있다.
이번 글에서는 왜 이 세 가지가 객체지향 설계의 핵심인지,
그리고 실제 프로젝트에서 어떻게 적용되는지를 쉽게 정리해보려고 한다.
역할(Role) - 객체가 맡은 '가면'
"같은 역할을 여러 객체가 할 수도, 하나의 객체가 여러 역할을 맡을 수도 있다."
- 역할이란 객체가 어떤 상황에서 수행하는 일이나 기능을 말한다.
- 예를 들어, 영화 예매 시스템에서 한 객체가 '결제자' 역할을 담당한다면,
결제와 관련된 행동과 정보를 책임지게 된다. - 뮤지컬 예매 시스템에서도 "결제자" 역할을 또 다른 객체가 수행할 수 있으며,
상황에 따라서는 한 객체가 "결제자" 와 "VIP 관리" 역할을 동시에 맡기도 한다.
왜 중요할까?
- "이 객체는 현재 어떤 역할을 하고 있지"를 파악하면, 협력 관계가 훨씬 명확해진다.
- 역할을 정의해두면, 우리가 시스템을 확장하거나 변경할 때도,
"이 역할을 다른 객체가 대신 맡게 하면 되겠군"하며 유연하게 대처할 수 있다.
책임(Responsibility) - 객체가 '알고 있는 것'과 '할 수 있는 것'
"한 객체가 책임져야 할 지식과 행동은 무엇인가"
객체지향에서 중요한 질문은 늘 "누가 무엇을 알고, 누가 무엇을 할 것인가?" 입니다.
이를 책임이라는 단어로 정리할 수 있다.
- 아는 것(Knowledge): 예를 들어 결제자 객체라면, 결제 수단 정보나 결제 금액을 알고 있어야 한다.
- 하는 것(Do): 결제자 객체는 결제 금액을 계산하거나, 결제 승인 과정을 처리할 수 있어야 한다.
책임 할당의 예시
- 영화 예매 시스템에서 "영화 티켓 가격 계산" 책임은 보통 "영화(또는 상영)" 객체가 갖도록 하거나,
"할인 정책" 객체가 갖도록 설계한다. - "결제 처리는 누가 담당해야 하지?" → "결제자" 역할의 객체에 책임을 부여하면 된다.
책임을 잘못 분배하면?
- 한 객체가 지나치게 많은 정보와 기능을 한꺼번에 가지게 되어 결합도가 높아지고,
응집도가 떨어진다. - 유지보수할 때 수정 범위가 넓어져 코드가 복잡해지고 에러가 늘어날 수 있다.
협력(Collaboration) - 메시지를 주고받으며 함께 일하기
"객체들은 메시지를 통해 상호작용하고, 필요한 일을 서로에게 요청한다."
객체 하나만으로는 시스템 전체 기능을 구현하기 어렵고, 따라서 객체들이 협력해야 하고,
협력의 핵심 매개체가 "메시지(메서드 호출)" 입니다.
- A 객체가 B 객체에 메시지(메서드)를 호출해서 "어떤 정보를 줘" 혹은 "이 일을 대신 해줘"라고 부탁한다.
- B 객체는 자신의 책임에 따라 필요한 정보를 반환하거나 동작을 수행한다.
- 이렇게 서로 역할에 맞춰 책임을 다하다 보면, 시스템 전체가 의도한 기능을 완수하게 된다.
협력이 잘못되면?
- A 객체가 B 객체의 내부 구조를 지나치게 알거나(캡슐화 위반),
B 객체가 할 일까지 A 객체가 떠 맡으면(책임이 뒤섞임) 결합도가 급격히 올라간다. - 반대로 각자 자기 역할과 책임만 수행하면, 외부 변화가 있더라도 내부 코드를 크게 수정할 필요가 줄어든다.
마무리 - "클래스를 고민하기 전에 역할과 책임부터 고민하라"
『오브젝트』 3장은 "왜 역할과 책임을 우선해야 하는지"를 강조한다.
우리가 클래스 다이어 그램을 그리기 전에,
- 이 시스템에 필요한 역할들은 무엇이고,
- 역할별로 어떤 책임이 필요한지,
- 그 책임들은 어떻게 협력해야 하는지를 먼저 고민하라는 것이다.
그렇게 하면 객체 간 결합도를 낮출 수 있고, 시스템이 유연하며 변경에 쉽게 대응할 수 있게 된다.
객체지향 설계에 입문하셨거나, 이미 아시는 분들도 한 번 더 읽어보면 "역할, 책임, 협력" 개념을
재정비하는 좋은 계기가 될거라 생각한다.
'📚Book Archive > Object' 카테고리의 다른 글
[오브젝트] 1장 '객체'지향 '설계', 무엇이 중요한가? (0) | 2025.03.23 |
---|
블로그의 정보
코드의 여백
rowing0328