Design Patterns(28)
-
Decorator Pattern ③ 적용 및 정리
일단은 데코레이터 패턴에 대한 정의는 이렇습니다. 테코레이터 패턴에서는 객체에 추가적인 요건을 동적으로 첨가한다. 데코레이터는 서브클래스를 만드는 것을 통해서 기능을 유연하게 확장할 수 있는 방법을 제공한다. -_-; 당췌 뭐라고 하는건지 알수가 없네요.. 역시나 말로 하는것보다는 그림으로 보면서 이해하는편이 훨씬 빠를것 같다는 생각이 듭니다. 뭔가 정의 내리는 건 책에서도 처음부터 하고 있지 않는걸 보니 정의는 언제나 그럴싸 하기때문에 온갖 어려운 미사여구로 장식되어 있기 때문에 와닿지 않는 것 같네요. 그럼 멋진말 다 뒤집어 엎고 이해하기 위해서.. 다른방법으로 접근을 합시다! 인터넷을 통해서 아래와 같은 다이어그램을 구할 수 있었습니다. 이것이 데코레이터 패턴의 일종의 모형이라고 볼수가 있는데요. ..
2007.02.12 -
Decorator Pattern ② Open Closed Principle
OCP(Open Closed Principle) 에 대해서는 Agile Java 스터디를 하면서 한번 발표한 내역이 있기 때문에 책을 보면서 그렇게 생소한 개념은 아니었습니다. 디자인 원칙중에서 가장 중요한 원칙중에 하나라고 소개하고 있는 OCP는 약간은 모순적인 개념입니다. 확장에 대해서는 열려있고, 코드 변경에 대해서는 닫혀 있다.뭔가 동시에 만족할 수 없는 조건입니다만, 실제 코드를 변경할 수 없는 상황에도 시스템을 확장할 수 있게 해주는 객체지향 기법이 있다고 합니다. -_- 헉.. 그게 바로 앞서 배웠던 옵저버 패턴이라고 합니다. 아 그렇군요.. 생각해보니 옵저버 패턴에 몬스터와 싸우는 플레이어를 추가(확장에 열려있는 경우)해주는데는 몬스터의 코드에 전혀 영향을 미치지 않았었군(변경에 닫혀있는 ..
2007.02.12 -
Decorator Pattern ① 문제점의 시작
데코레이터 패턴 공부를 하면서, 영화표를 파는 걸 한번 만들어 보자.. 생각했습니다. 일단 클래스를 만들어 봤는데요.. 개괄적인 클래스의 모습이 이러했습니다. 'ㅅ' ㅋㅋ 아주 간단합니다. 그냥 연령별로 티켓을 만들어 주면되구요.. 가격이라던가, 어떤 연령대의 티켓인지만 알수 있으면 되죠.. 굉장히 간단하구나.. 생각했는데 하나 의문점이 들었습니다. 보통 영화관에서는 카드로 할인을 해주는데.. 이런 할인 서비스를 구현하기 위해서는 어떻게 해야될까?? 생각했습니다. 또, 이런 할인이 중복되어서 할인이 되는 경우를 생각해봤습니다. -_-;; 4가지의 형태(일반, 청소년, 경로, 아이) 의 티켓 요금이 존재하고, 또 할인되는 경우가 3가지 라면.... 머릿속이 복잡합니다.. 계산을 해보니 약 32개의 클래스가..
2007.02.12 -
Observer Pattern ③ 정리
옵저버 패턴에서는 느슨한 결합(Loose Coupling)이라는 객체 디자인을 제공합니다. 그럼 느슨하게 결합 되어 있다는 이야기가 무슨 이야기가 될까요?? 책에는 상호작용을 하지만 서로간에 대해 서로 잘 모른다는 것을 의미 한다고 합니다. 말이 너무 어려워서 만든 소스코드를 보면서 이해해 보도록 하겠습니다. 몬스터(주제)는 플레이어에 대해서 아는 정보라고는 인터페이스 정보 뿐입니다. public void notifyPlayer() { for (int i = 0; i < list.size(); i++) { Player player = (Player) list.get(i); player.update(weakness, frenzy); } } 이처럼 플레이어를 구현한 객체에 대한 정보 없이 단순히 인터페이스에..
2007.02.06 -
Observer Pattern ② 패턴 활용 예제
먼저 지난 Strategy Pattern 예제는 스타크래프트로 만들었는데 이번에는 월드 오브 워크래프트를 이용해서 한번 만들어 보았습니다. 게임을 통해서 무언가 공부를 한다는건 재미있고 또 이해하는데 많은 도움이 되는것 같습니다. 먼저 옵저버 패턴에서의 Subject(주제)가 되는 것은 몬스터라고 설정을 했습니다. 몬스터를 잡기 위해서는 혼자보다는 파티 구성을 해서 잡기 때문에 파티원 하나하나를 옵저버로 보고, 몬스터의 광포화 상태와 약점의 속성이 바뀔때 마다 플레이어의 반응이 달라지도록 구현을 했습니다. 일단 몬스터라는 클래스의 소스코드를 살펴보시겠습니다. package designPattern.Observer; import java.util.ArrayList; public class Monster i..
2007.02.06 -
Observer Pattern ① 개요
지난번 Strategy Pattern에서는 상속과 구현을 이용한 클래스 설계 후에 그것을 리팩토링 하면서 해나가면서 배우는 디자인 패턴이었다면, 이번에는 다른 방법으로 접근을 해보겠습니다. 먼저 Observer Pattern을 간단하게 그림과 함께 알아보도록 하겠습니다. 유후군 잇힝리라는 마을이 있다고 가정을 합시다. 잇힝리에 사는 현씨네 큰 아들이 장가를 간다고 이장님이 이 동네사는 현아네, 윤주네, 범석이네 식구들에게 방송으로 이 경사스러운 소식을 알렸습니다. 그렇지만 잇힝리에 살지 않는 한산이네까지는 방송이 되지 않았습니다. 옵저버 패턴은 이와 같이 동네 이장님이 동네 사람들에게 어떤 소식을 알리는 것과 같은 것을 비유해서 알고 있으면 기억하기가 쉽습니다. 보통 유식한 말로 이렇게 이야기 합니다. ..
2007.02.06