반응형
지난 포스팅에서는 일반화를 다루었다.
회원(MEMBER)는 VIP 회원과 일반 회원(Ordinary)의 일반화이다.
VIP 클래스나 ORDINARY 클래스의 공통된 데이터에 대한 로직은 MEMBER 클래스에 접근하는 것이 좋다. 반면 VIP 할인과 같이, VIP만 해당되는 영역은 VIP만 따로 접근하는 것이 좋다.
여기서 요구사항이 추가되었다고 가정해보자. 지역(Local) 주민들은 기프티콘을 받는다. VIP이면서 지역주민일 수 있고 일반 회원이면서 지역주민일 수 있다.
VIP 와 ORDINARY 클래스를 LOCAL 클래스를 기준으로 나누고 LOCAL 클래스로 일반화한 도식이다. 일반화된 LOCAL클래스는 Gift 클래스와 연관관계를 맺는다.
만약 LOCAL이기는 한데 VIP인 경우, 중복 혜택을 받는 것이 불가능하다는 요구사항이 추가되면 어떻게 될까. 이 말은 즉 일반회원인 지역주민만 기프트콘을 받을 수 있다는 말이다.
ORDINARY-LOCAL 객체만 Gift 객체와 연관관계를 맺으면 된다. 이렇듯 일반화 할 요구사항이냐 특수화 할 요구사항이냐에 따라서 설계가 달라질 수 있다. 그러므로 객체지향설계는 결합도를 낮추기 위해 무작정 일반화만 하는 것이 능사가 아니다. 요구사항에 따라 적절히 특수화를 시킬 수 있어야 한다.
참고자료
반응형
'OOP > OOP Basic' 카테고리의 다른 글
[OOP] 피터 코드의 상속 규칙 (1) | 2022.10.18 |
---|---|
[OOP] 일반화(추상화) (0) | 2022.10.17 |
[OOP] 캡슐화 (0) | 2022.10.17 |
[OOP] 의존관계 (0) | 2022.10.12 |
[OOP] 합성관계와 집합관계 (0) | 2022.10.12 |