본문 바로가기

디자인패턴

[Design Pattern: 구조] 10. Pacade 목적여러가지 복잡한 것들을 하나로 간주해서 편하게 다루는 방법예를 들어, 우리가 흔히 자동차라고 하는 물건은 바퀴, 엔진, 오디오, 사이드 미러 등등 으로 이루어져있지만 우리는 그냥 다 자동차라고 생각하는 게 편합니다. 차안에서 음악을 듣고 싶으면, 그냥 오디오를 켜면 됩니다. "차량에 내장된 오디오"라는 것을 굳이 명확히 하기는 귀찮죠. 예제딱히 그닥 별다른 패턴이 아니기에 생략! 더보기
[Design Pattern: 구조] 9. Decorator 목적주어진 상황이나 용도에 따라 덧붙히는 패턴기능의 확장이 필요할때 서브클래스를 만드는 것보다 유연한 구조를 만들 수 있는 대안예제를 보면 정말 쉽게 알 수 있다. 계속 캡슐로 기능을 싸는 형식이라고 생각하면 쉽다. Decorator Pattern in JAVA API //Inputstream 예제 InputStream is; is = new BufferedInputStream(new FileInputStream(new File("java.txt")) ); 예제 스타크래프트로 예제를 작성하겠다. 데코레이트는 부가적은 기능을 늘려주는 목적이기 때문에 하이템플러의 능력을 업그레이드 하는 과정을 표현했다. 일단 하이템플러를 뽑으면 기본적으로 아무 능력을 발휘할 수 없다(피드백은 됨. 머 없다칩시다). 업그레이.. 더보기
[Desgin Pattern: 구조] 8. Composite 목적객체를 트리구조로 구성하고 개별객체와 복합객체(Composite)가 구성클라이언트에서는 두 객체를 동일하게 사용할 수 있음이 패턴을 적용하면, 기존의 오브젝트를 재이용하기 수월해지고, 오브젝트의 동적인 조립을 실현하는 것이 수월해진다 구조Leaf클래스와 Composite클래스가 있음Leaf클래스와 Composite클래스는 동일한 Abstract를 상속받음Composite클래스는 Leaf클래스들을 답는 용도 예시 // 기본 유닛 Abstract public abstract class Unit { public abstract void attack(); } // Unit을 상속받은 마린!! public class Marine extends Unit{ @Override public void attack() .. 더보기
[Design Patter: 구조] 7. Bridge 목적추상(abstraction)과 이것의 구현(implementation)을 분리하여 각각이 독립적으로 변경될 수 있도록 하는 것클래스 자체가 자주 변할 때 뿐 만 아니라 클래스가 하는 기능이 자주 바뀔때도 유용예제스타크래프트로 예제를 만들어보자. 스타포트에서 나오는 레이스, 드랍쉽에게 Weapon 인터페이스를 가지게 하고 각각의 무기를 따로 클래스로 만들었다. // weaopn 인터페이스를 가지고 있는 Unit Abstraction public abstract class Unit { private Weapon weapon = null; public Unit(Weapon weapon){ this.weapon = weapon; } public void attack() { weapon.attack(); } .. 더보기
[Desigon Pattern: 생성] 4. Prototype 목적 객체를 생성할때에는 new 를 사용한다. 이 연산은 비용이 큰 연산이고, 생성할때의 로직이 복잡하다면 더욱 더 비용은 증가할 것이다. 따라서, 이를 최소화하기 위해 clone(복사)를 통해 이 비용을 줄이기 위핸 패턴이다. 예제 스타크래프트를 통해 예제 코드를 작성했다. 하지만 아래의 예제코드는 목적이 Prototype에는 확실히 부합하지 않는다. 유닛의 객체 생성의 과정이 굉장히 복잡하다고 가정하고 아래와 같은 예제 코드를 작성하였다. Prototype을 쓰는 방식은 맞기 때문에 쉽게 사용방법을 이해하는 목적으로 봐주시길... // Cloneable을 상속받은 기본 Unit Abstraction public abstract class Unit implements Cloneable{ public a.. 더보기
Design Pattern in Java API (JDK) Design Pattern in Java API (JDK)Abstract factory (recognizeable by creational methods returning the factory itself which in turn can be used to create another abstract/interface type)javax.xml.parsers.DocumentBuilderFactory#newInstance()javax.xml.transform.TransformerFactory#newInstance()javax.xml.xpath.XPathFactory#newInstance()Builder (recognizeable by creational methods returning the instance.. 더보기
[Design Pattern: 생성] 3. Abstract Factory 목적Factory Method의 확장 버전으로 Factory를 유연하게 만들어 더 높은 유연성을 보일 수 있다. 설명 & 예제이번 디자인 패턴을 설명하기에는코드보다는 아래 설명이 훨씬 효과적일 것이다. 생산공장 F; 유닛 H; F = new 배럭(); H = F.생성(MR); //마린생성 H.어택(); //총쏘기 F = new 스타포트(); H = F.생성(BC); //배틀크루저생성 H.어택(); //레이저 이처럼 생산공장(Factory)를 배럭 or 스타포트로생성할 수 있고, 그에 따라 다시 마린or메딕 & 배틀크루져or레이스를 뽑을 수 있다.그리고 조금 더 추가하자면 배럭인지 스타포트인지에 따라 유닛에 속성을 [날수 있음] 을 따로 부여해줄 수 있다. 더보기
[Design Pattern: 생성] 2. Factory Method 목적객체를 생성하는 Factory 클래스를 만들어 코드를 사용한 클래스(Main)에서는 new를 하지 않고 유연하게 사용하고자 하는 목적 JAVA API 예제 Boolean a = Boolean.valueOf(true); Boolean b = Boolean.valueOf(true); System.out.println(a==b); Boolean.valueOf()를 통해 new를 하지 않고 객체가 생성됬다. 그리고 내부적으로 동일한 매개변수가 들어왔을 떄 객체를 생성하지 않고 동일한 레퍼런스를 보내는 로직을 Factory에서 담당하고 있다. 예제 인터페이스 Unit을 상속으로 받은 Marin과 Mdedic을 만든다. Unit은 공통적으로 Attack()을 가지고 있다. public abstract class.. 더보기