본문 바로가기

Design Patterns

(10)
State Pattern ② 그래서 바꿔봤습니다. -_- 클래스 이름이 NewWife 라고 하지만.. 새엄마 생각하지말고.. (내지는 새 마누라;;) 객체지향 디자인 패턴으로 돌아온 와이프 라고 생각하세요 -_-;; 푸하하;;; 좀 웃기긴 하지만.. 일단은 스테이트 패턴에서는 아까 가족구성원의 변화를 생각하서.. 가족구성원의 추가 제거가 쉽도록 하는 방법에 좀 신경을 써봤습니다. 가장 먼저 생성되는건 인터페이스입니다. public interface FamilyState { public void earnMoney(); public void comeHomeInMidnight(); public void nagInHoliday(); public void cheerUp(); public void tellALie(); }이건 어떤 상태(대상)..
State Pattern ① 후.. 이번에는 스테이트 패턴이군요.. -_-;; 한 이틀동안 봤는데.. 공부를 하면서 느낀건.. 너무 헷깔린다는 겁니다. GoF의 패턴 UML을 봐도 그렇고.. 스트레티지랑 너무 헷깔려서 짜증났습니다 -_-;; 그냥 그렇다구요.. 그래도 공부는 해야죠.. ㅠㅠ. 일단 멍청한 프로그램을 만들었습니다. 물론.. 제가 멍청하다는건 아니고 -_-;;; 그럴수도 있지만..;;; 책 처럼 일단 시작을 해봣습니다. 뭔가 상태에 따라서 반응이 틀려지는 그런게 뭐가 있을까.. 고민고민하다가 찾아낸 것이.. 엄마의 잔소리 입니다. -_-;; 그래서 만들어 봤습니다. 전혀 개인적인걸 섞지 않았고 가급적이면, 인터넷에서 찾은 내용들로 객관적? 으로 엄선해봣습니다. 소스코드는 아래와 같습니다. (너무 길어 숨겨주는 센스!) ..
Template Method Pattern ③ 자자 그럼.. 템플릿 메소드에 대해서 정의를 이렇게 내리고 있습니다 ^^ ㅋ 템플릿 메소드 패턴에서는 메소드에서 알고리즘의 골격을 정의합니다. 알고리즘의 여러 단계 중 일부는 서브클래스에서 구현할 수 있습니다 템플릿 메소드를 이용하면 알고리즘의 구조는 그대로 유지하면서 서브클래스에서 특정 단계를 재정의 할 수 있습니다. 요런 클래스 다이어 그램이 그려집니다. +_+ 호호.. 제가 만들었던 거랑 비슷하지요?? 이다음에는 새로운 디자인 원칙에 대해서 설명을 합니다. 바로 할리우드 원칙이란 건데요. 이렇게 표현이 되어있습니다. 할리우드 원칙 먼저 연락하지 마세요. 저희가 연락 드리겠습니다.무슨 소릴까요 과연..? 의존성에 문제 입니다.고수준의 구성요소 즉 슈퍼 클래스가 서브 클래스에 의존하고 서브클래스 역시도..
Template Method Pattern ② 앞서 예를 들었던 Boy 와 Girl 클래스는 어떤 문제점이 있을까요?? 두 클래스에 굉장히 겹치는 부분들이 많다는 거죠.. 이런 겹치는 부분들이 생기면?? 상속을 활용한 재사용을 했습니다. 그래서 바꿔 봤습니다.. 상속을 통한.. ^^ 재사용을 위해서 말이죠~ 그래서 이렇게 상속의 구조로 고쳐봤습니다. 중복이 되는 코드인 고독을 느끼는 메소드와.. -_-;; (메소드명이 참;;) 사랑을 고백하는 메소드는 추상 클래스인 Human 클래스에 미리 정의를 해놓고.. findMates() 라는 메소드는 추상메소드로 상속 받는 서브 클래스에서 정의 하도록 했습니다. 이렇게 되면.. 공통적인 부분들을 확실히 분리해서 아름다운 코드가 되겠지요.. ^^ 음.. 하지만 아쉬운게 있습니다. 서브 클래스에 있는 findG..
Template Method Pattern ① 하하.. 오랜만에 DP 공부를 다시 합니다.. 왜냐... -_-;; 학교에서 공부를 하고 있단 말이죠.. 지금 예습을 한 패턴이 몇개 안됩니다.. 지금 1챕터가 끝났는데 예습은 7챕터까지 밖에 안해놨으니.. 빨리 끝까지 가야겠습니다. 이번에 배울 패턴은 템플릿 메소드 패턴입니다. 흠.. 이름이 에지간이 멋있네요.. 하튼 이놈의 패턴들은 이름 간지 포스가 좔좔.... 후후 재미있는 예제 소스 속으로 일단 빠져 보시겠습니다. 이번 예제의 에피소드는 남녀의 작업 실태?? 정도로 생각하시고... 가벼운 마음으로 보시길 바랍니다. 괜히 여기서 성정체성을 찾는다던가.. 나는 안그런데.. 이러실 필요 없습니다.. -_- 왜? 제 생각이니까요.. package templateMethod; import java.util..
Facade Pattern ③ 정리 퍼사드 패턴을 사용하면.. 복잡한 시스템을 간소화 할 수 있습니다. 물론 복잡한 시스템을 직접 건드려서 사용하는 것도 가능하지만.. 간단하고 편리한 것을 원하는 경우에는 퍼사드 클래스를 이용하면 됩니다. 퍼사드는 인터페이스를 단순화 시킬 뿐만 아니라 클라이언트와 구성요소들로 이루어진 서브시스템을 분리시키는 역할도 합니다. 앞서 배웠던 어댑터와 퍼사드는 모두 여러 개의 클래스를 감쌀 수 있습니다만 퍼사드는 인터페이스를 단순화 시키기 위한 용도로 쓰이고, 어댑터는 인터페이스를 다른 인터페이스로 변환하기 위한 용도로 쓰입니다. 그럼.. 퍼사드를 또 그럴싸하게 알아보도록 하겠습니다. 어떤 서브시스템의 일련의 인터페이스에 대한 통합된 인터페이스를 제공합니다. 퍼사드에서 고수준 인터페이스를 정의하기 때문에 서브시스..
Facade Pattern ① 개요 퍼사드 패턴.. 완죤 멋있죠? 이름이 멋있다는 겁니다 -_-;; 아직 퍼사드가 뭐하는 놈인지 몰라효... 그래서 퍼사드를 일단 배워야죠... -_- 뭐라는거니..;;; 아무튼.. 어댑터 패턴을 배우면서 생각했습니다.. 일단 뭐 어댑터 패턴이 어떤 인터페이스를 다른 인터페이스에 맞도록 하는 어댑터 클래스를 하나 생성하는 방식입니다. 그럼.. 좀 다른 방법을 강구를 해보면.. 해당 인터페이스보다 더 큰 상위 개념의 인터페이스를 작성하는 것도 하나의 방법인것 같습니다. 그래서 나온 퍼사드 패턴을.. 인터넷에서 쭉 돌아다니다 보니까.. 이런 얘기를 하더라고요... 퍼사드 패턴이 적용된 매쏘드를 읽고 있으면 마치 batch file(*.bat)을 읽고 있는 느낌입니다. 90년대 초반 DOS게임들은 bat파일로 시..
Adapter Pattern ② 예제 소스 음.. 일단.. 이번에도 스타크래프트를 예를 들어서 소스코드를 만들었습니다. 우선 테란 유닛들에 대해서 잘 생각해 보면.. 모든 유닛이 공통적으로 가능한 것들이 클릭했을때 어떠한 특정한 목소리를 내는것이고.. 하나는 적군 유닛을 공격하도록 합니다. 그래서 아래와 같이 UML 이 그려졌습니다. 일단 TerranUnitInterface 라는 것을 만들어 주구요.. 이걸 구현하는 클래스가 원래는 2개가 있었습니다. 바로 Marine 클래스와 SiegeTank 클래스입니다. 둘다 attack() 과 clickIntAction() 메소드를 오버라이드 하고 있구요.. 그런데.. 확장팩이 생기면서 메딕이라는 유닛이 나타났습니다. 이유닛은 똑같이 공격 명령을 내리는데.. 메딕은 공격대신에 아군을 치료한다고 합니다. 비..