본문 바로가기
카테고리 없음

객체지향의 "책임"의 함정에 빠지지 말자.

by 손너잘 2021. 3. 9.

우테코의 블랙잭 미션을 진행하면서 피드백을 받은 부분이 있다.

 

먼저, 요구사항을 말하자면, 플레이어는 카드를 가지고 있고, 플레이어에게 점수를 요청하면 카드의 번호를 확인하여 점수를 계산하고 반환하는 구현이다.

 

기존의 나의 코드는 Player 클래스가 Deck클래스를 가지고 있고, Deck 클래스에게 카드 정보를 요청해서 점수를 Player가 계산해서 반환하도록 하였다. 아래와 같은 형식이다.

이러한 구조를 선택한것에는 큰 착각이 있었다. 객체의 책임과 역활을 생각하다 보니. 

"어쩌피 실제에서도 플레이어가 점수 계산하지 않나? 그러면 점수 계산의 책임을 플레이어에게 줘도 되겠군!"

이라는 생각을 해버리고 만 것이다.

 

하지만 객체지향에서 객체는 자율적인 존재이다 (의인화). 또한 객체지향의 기본 원칙인 캡슐화에 따라서 데이터와 로직은 하나의 모듈에 존재해야 한다. 따라서 점수계산은 Player가 아닌 Deck에서 이루어 져야 한다.

이러한 이유로 나는 객체지향의 원칙에 어긋난 설계를 하고 말았다. 객체지향을 지키겠다고 책임과 역할을 생각하다보니 오히려 객체지향적으로 생각하지 못한것이다.

 

예전에 포비가 solid에 심취한 사람 치고 객체지향 잘하는 사람 본적 없다고 말했었다. 지금 이 상황이 딱 그 상황 아닐까라는 생각이 든다.

댓글