본문 바로가기

Design Patterns

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