본문 바로가기

Design Pattern

[디자인 패턴_Again] Observer Pattern. 옵저버패턴은 어떠한 상태가 변화되었을 때 그것을 통보해주는 녀석과 통보를 받고 알아서 행동하는 녀석들이 있습니다. 여기서 이 통보를 받고 각자의 행동을 하는 녀석들이 observer입니다. 앞서 잠깐 언급한 와우 짝퉁으로 다시 돌아가서 앞을 정찰하는 Watcher가 있고, 이녀석이 적을 만났을 때 각각의 캐릭터들에게 "적이다!" 라고 알려줍니다. 각각의 캐릭터들은 적을 만났을때, 각자의 행동을 합니다. 예를 들면 전사는 칼과 방패를 들고 맨 전열로 나가고 성직자는 다른 캐릭터들에게 축복을 걸고 도적은 그림자 숨기를 시전합니다. 성기사는 전사와 같이 전열로 나가겠죠. 물론 게임이라면 유저가 컨트롤 하는 것이겠지요..^^ 이렇게 적이 나타났다고 알려주는 역할을 하는 녀석(Watcher)는 자기가 가지고 있는.. 더보기
[디자인 패턴_Again] Strategy Pattern. 우리는 클래스를 설계 할 때 클래스 상속이란 것을 사용합니다. 클래스를 상속하면 클래스의 행동(메소드)와 상태(클래스변수등)를 상/하위 클래스들이 공유를 할 수 있습니다. 만약 와우 짝퉁을 만든다고 하겠습니다. 처음이기 때문에 간단한 직업을 3개만 우선 만들어보기로 합니다. 전사/도적/성기사죠. 이들은 모두 걷거나 뛰어서 이동하고 칼로 근접 전투를 합니다. 그래서 상위 클래스를 만들어서 "걷다" "뛰다" "액션" 라는 행동을 정의하고 그것을 상속받아서 각각의 하위 클래스에서 공격이 조금 다른 직업일 경우 이를 override 하기로 했습니다. Character | Warrior Thief Paladin 이렇게 설계를 했다고 합시다. 많은 다른 좋은 방법이 있겠지만 일단 이렇게 -_-;; Character.. 더보기
다시 시작하자! 디자인패턴. 원래 이 카테고리에 있는 디자인 패턴에 대한 포스팅은 이해를 하고 썼다라기 보다는... 제가 한 3년전에 디자인 패턴 책을 보고 소스를 겨우겨우 따라가서 미흡하나마나 이해했던 내용을 보고 정리를 해놨던 포스트들입니다. 그때는 디자인 패턴이 왜 필요한지 잘 몰랐고 자바 자체에 대한 이해도도 많이 떨어지는 상태여서 그 정리라는 것이 엄청나게 부족합니다. 제가 봐도 뭔 소리인지 모르겠는데 다른 분들은 더 하시겠지요 -_- 작년 한해 부족함을 많이 느끼고 기초부터 다시 한다는 생각으로 다독과 많은 공부를 했고 그리고 이번에 다시 디자인 패턴 책을 보았습니다. 그리고 그 내용을 다시 정리하려고 합니다. 패턴이라는 것이 외워서 소스에 적용하려면 절대 안 써지죠.. 이걸 외울 생각을 했었으니 -_- 패턴이라는 것은 .. 더보기
[Java-Pattern] Prototype 인스턴스를 생설할때 new를 사용하는 것이 아니라 이미 만들어진 인스턴스를 복사해서 새로운 인스턴스를 만들어 내는 패턴이다. 이 인스턴스 생성 방식을 사용 하는 이유는 1. 종류가 너무 많아 한개의 클래스로 할 수 없는 경우 2. 클래스로부터 인스턴스를 생성하기 어려운 경우 3. 프레임워크와 생성할 인스턴스를 분리하고 싶은 경우 정도로 나눌 수 있다. 예를 보면.. Product 인터페이스와 Manager 클래스는 framework패키지에 속해있고, 인스턴스를 복제하는 일을 한다. Manager클래스는 createClone을 호출하지만 구체적의 어느 클래스의 인스턴스인지 까지는 알지 못 하며 단지 Product인터페이스를 구현한 클래스의 인스턴스라면 복제가 가능하다. MessageBox클래스와 Under.. 더보기
[Java-Pattern] Builder 문서작성 프로그램을 예제로.. Builder라는 추상 클래스를 만들고 여기에 추상메서드 makeTitle,makeString,makeItems,getResult라는 메서드를 둔다.. 그리고 Builder를 상속하는 TextBuilder,HTMLBuilder 클래스를 만들고 위 추상 메서드들을 구현하여 준다. 이름만 봐도 알겠지만 하나는 텍스트로 만들어서 뿌려주는 클래스고 하나는 html형식으로 파일을 만들어주는 클래스이다. 그리고 클라이언트쪽에서는 저 Builder를 직접 호출하는 것이 아니라 Director라는 클래스를 통해서 호출한다. Director클래스는 public class Director { private Builder builder; public Director(Builder builder.. 더보기
[Java-Pattern] Bridge 이 패턴은 기능의 클래스 계층과 구현의 클래스 계층으로 나누어 설계하는 것이다. 기능의 클래스 계층이란 Something이란 클래스가 있을때 여기에 새로운 기능을 추가하기 위해서 Something의 하위 클래스로서 SomethigGood이라는 클래스를 만들어 기능을 확장할때 이것을 기능의 클래스 계층이라 한다. 구현의 클래스 계층이란 A라는 추상메서드를 상속하는 B클래스에서 그 추상메서드에서 선언된 메서드들을 실제로 구현하게 되는데 이를 구현의 클래스 계층이라고 한다. 예제프로그램 여기서는 주어진 문자열을 박스안에 넣어서 출력하는 클래스 하나와 주어진 숫자만큼 반복해서 출력하는 프로그램을 예제로 사용하였다. 기능의 클래스 계층 - Display(표시하는 클래스),CountDisplay(지정 횟수만큼 표시.. 더보기
[Java-Pattern] Visitor Composite 패턴과 조금 유사한 형태이다. 데이터 구조와 처리를 분리시킨 패턴으로 데이터 구조안을 돌아다니는 주체인 방문자를 나타내는 클래스를 준비해서 그 클래스에게 처리를 맡기는 패턴이다. 새로운 처리를 추가하고 싶을때는 새로운 방문자를 만들면 되는 것. 그리고 데이터 구조는 문을 두드리는 방문자를 받아들이면 된다. 디렉토리 구조를 다시 예제 프로그램으로.. 8개의 클래스로 분류된다. 1.Visitor - 파일이나 디렉토리를 방문하는 방문자를 나타내는 추상 클래스 2.Acceptor - Visitor 클래스의 인스턴스를 받아들이는 데이터 구조를 나타내는 인터페이스 3.ListVisit - Visitor의 하위 클래스로 파일이나 디렉토리의 일람을 나타내는 클래스 4.Entry - 파일과 디렉토리의 .. 더보기
[Java-Pattern] Chain of Responsibility 책임 떠넘기기 패턴 어떤 처리 요구가 들어왔을때, 그것을 처리 할 수 있는 인스턴스가 나타날때까지 그 처리를 넘기는 패턴이다. 예제프로그램은 임의의 숫자를 가진 트러블을 발생시키고, 트러블을 해결하는 클래스들을 종류별로 만들어 놓은 후 Chain of Responsibility패턴을 구현한 것이다. 1.Trouble - 발생한 트러블을 나타내는 클래스. 트러블 번호를 갖는다. 2.Support - 트러블을 해결하는 추상 클래스 3.NoSupport - 트러블을 해결하는 클래스 (항상 처리하지 않음.) 4.LimitSupport - 트러블을 해결하는 클래스 .... Trouble Class public class Trouble { private int number; // 트러블 번호 public Troub.. 더보기
[Java-Pattern] Mediator 조정자 역할을 하는 클래스를 뜻한다. 여러 클래스들이 서로 연관되어서 통신을 하게 될 경우 A,B 두개의 클래스라면 2개,A,B,C라면 6개..등등 클래스가 하나하나 늘어날때마다 제어해줘야하는 통신량은 어마어마하게 늘어나게 된다. 예를 들어 로그인 창을 하나 만든다고 할때, guest를 클릭하면 입력필드가 disable되고, login을 클릭하면 입력필드가 enable되면서 버튼이 생기고 이런 서로 연관된 동작을 가운데 중재자를 두어 통제하는 패턴 방식이다. 예제는 위에서 얘기한 로그인 애플릿 창이다. 등장 클래스.. 1.Mediator - 카운셀러의 인터페이스를 정하는 인터페이스 2.Colleague - 멤버의 인터페이스를 정하는 인터페이스 3.ColleagueButton - 버튼을 나타내는 클래스 4.. 더보기