본문 바로가기

Design Patterns

Decorator Pattern ① 문제점의 시작

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
데코레이터 패턴 공부를 하면서, 영화표를 파는 걸 한번 만들어 보자.. 생각했습니다. 일단 클래스를 만들어 봤는데요.. 개괄적인 클래스의 모습이 이러했습니다. 'ㅅ' ㅋㅋ

사용자 삽입 이미지
아주 간단합니다. 그냥 연령별로 티켓을 만들어 주면되구요.. 가격이라던가, 어떤 연령대의 티켓인지만 알수 있으면 되죠.. 굉장히 간단하구나.. 생각했는데 하나 의문점이 들었습니다. 보통 영화관에서는 카드로 할인을 해주는데.. 이런 할인 서비스를 구현하기 위해서는 어떻게 해야될까?? 생각했습니다. 또, 이런 할인이 중복되어서 할인이 되는 경우를 생각해봤습니다.



-_-;; 4가지의 형태(일반, 청소년, 경로, 아이) 의 티켓 요금이 존재하고, 또 할인되는 경우가 3가지 라면.... 머릿속이 복잡합니다.. 계산을 해보니 약 32개의 클래스가 생성이 됩니다. 이 32개의 클래스가 전부다 MovieTicket 클래스를 상속받게 되고, 요금 정책이 바뀌면, 클래스 하나하나를 다 고쳐줘야하는 수고스러움이 생깁니다.

그러면 할인이 되는지 안되는지에 대해서는 모두 MovieTicket이 가지고 있을 수 있다면?? 만약에 FreeTicket이라고 무료 티켓이 생기게 된다면.. 여기에 대해서도 할인을 받을수 있다면??? 되려 영화관에서 영화를 보러온 사람한테 돈을 주게 되는 결과가 생길지도 모릅니다 -_-;; (물론 안주면 되지만..)



그럼 이런 문제점을 해결하기 위해서는 어떠한 방법을 써야할까요?? 첫번째로 이 클래스의 문제점을 살펴보았습니다. 일단 가장 처음 설계단계에서는 변화하는 부분을 캡슐화 시키지 않았다는 문제점이 있습니다. 가격은 수시로 변할 수 있는 것이기 때문에 변화하는 부분에 대해서 고려를 할 필요성이 있습니다. 또한 어떠한 인터페이스가 아니고 상속을 이용하여 별로 유연하지 못한 디자인 구성을 하고 있습니다.



책에 보면 이런 내용이 나옵니다 ㅋㅋ
"코드는 밤에는 열려있고 아침이 되면 활짝 열리는 연꽃과 같아야 하느니라"
이게 바로 Open Closed Principle 이라고 한다는데요.. 다음번에 자세하게 알아보도록 하겠습니다.