Point객체에는 이 포인트에 속하는 User와 balance가 있음.
즉, 이 객체는 포인트의 balance의 증감을 책임져야 하고, 외부의 다른 객체가 Point 객체의 balance의 상태를 변화시키면 안 됨. balance 상태 변화는 오직 Point 객체가 자율적으로 책임져야 함. 외부에서는 메시지를 보낼 수 있지만 이 메시지를 어떻게 처리하는지는 최종적으로 Point객체 스스로가 (자신의 메서드를 통해) 결정함.
PointService는 Point 객체 자체를 CRUD 하는 역할을 하며 내부 필드의 값이 변경될 때는 직접 변경하는 게 아니라 Point 객체에게 메시지를 보내는 역할을 함. 즉, Point라는 거대한 외부를 책임짐.
PointTransactionService는 거래내역을 생성하라는 메시지를 보내는 것과, 생성되는 거래내역에 따른 포인트 잔액 차감을 하라는 메시지를 Point 객체에 전송하는 역할을 함. 즉, PointTransaction의 외부를 책임지는 것과, Point에 메시지를 전송하는 역할을 함.
Point 객체가 수행한다! 왜냐면 balace는 Point 객체의 필드이고, 이건 Point 객체 내부에서만 접근해서 조정하는 게 바람직한다.
PointService 또는 PointTrasactionService 객체는 Point에 메시지를 보내는 것
그 메시지를 받아서 처리하는 건 Point 객체의 adjustBalance다!