본문 바로가기

Language

[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(); } .. 더보기
이클립스 프로젝트에 빨간 느낌표가 있다?? - 프로젝트명에 x 표시 외에 !표시는 import 시킨 jar 파일의 경로가 잘못되었거나 유효하지 않은 파일이나 디렉토리를 참조하고 있는 경우이다. 이 !표시가 있으면 소스파일을 수정해도 컴파일이 되지 않는다. SVN을 사용하는 경우 SVN 저장소와의 설정내역이 다를경우에도 나타날 수 있다. 해결방법 예시: jar파일이나 디렉토리를 참조하고 있는 내역을 확인한다. 삭제! 삭제! 느낌표가 사라졌음요! 더보기
[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.. 더보기
[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레이스를 뽑을 수 있다.그리고 조금 더 추가하자면 배럭인지 스타포트인지에 따라 유닛에 속성을 [날수 있음] 을 따로 부여해줄 수 있다. 더보기