본문 바로가기

Language/Design Pattern

[Design Pattern: 구조] 11. Flyweight 목적Flyweight 는 동일한 것을 공유해서 객체 생성을 줄여 가볍게 만드는 것클래스 별로 factory를 씁니다. 그리고 그 factory에서는 자신이 찍어내는 객체들을 관리합니다. 이미 가지고 있는 객체에 대한 요청이 들어왔을 때는 관리하고 있던 객체를 던져주고, 가지고 있지 않은 것을 요청하면 새로 객체를 만들어 관리 리스트에 추가시키고 던져줍니다. **FactoryMethod와 굉장히 유사하다-키(이름이 되겠지요)를 통해 객체를 생성하는 부분에서는 거의 동일하다고 할 수 있다. Factory에서 이름을 받아 객체를 생성하니깐요. 하지만 동일한 키가 들어왔을때 동일한 갱체를 넘겨주느냐 새로운 객체를 주느냐에 대한 차이만 있네요예제 public class PersonFactory { private .. 더보기
[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: 생성] 5. Builder 목적외부 클래스에 의해 객체가 만들어지고 그에 따라 유연하게 객체를 만들 수 가 있다.속성값을 가지는 객체를 생성할때 다른 제 3의 class(Builder)가 해당 객체를 만들어 줌 Builder Patter in JAVA API Java에서 사용하는 Builder 디자인 패턴의 예이다. StringBuilder sb = new StringBuilder() .append("나는") .append("디자인") .append("패턴") .append("공부를합니다."); System.out.println(sb.toString()); 이렇게 .함수().함수() 이런 패턴을 사용한다. 2개의 BuilderPattern?? 좀 이상하게 Builder에 대해 검색을 해보면 2가지 방향(방법?)이 있는듯하다. 하나.. 더보기
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.. 더보기