Bridge Pattern(가교패턴)은 구조패턴의 하나로, 추상과 구현을 분리하여 다양성을 가질수 있도록하는 패턴이다. 가교패턴을 사용하면, 런타임에 구현방법을 선택할 수 있고, 추상과 구현이 분리 되어있기 때문에 추상개념만 연결하면 독립적으로 확장하는게 쉽다. 가교패턴을 살펴보면, 기본 구조(꼴)이 다음과 같이 보인다. 추상을 만들고 이를 상속하는 컨크리트클래스를 만들어서 구현한다. 이와 관련된 예시를 생각해보았으나 잘 생각나지 않아 위키에 있는 예제코드(조금 바꿈) 살펴보겠다. 기본적으로 추상으로써, DrawingAPI라는 인터페이스를 만들어서, 이를 상속받는 DrawingAPI1과 DrawingAPI2를 만들어 구현한다. (여기서 구현부는 출력만 되도록 되있다.) public interface Dr..
prototype pattern, 즉 원형패턴이란 원형이 되는 인스턴스를 활용해서 새로운 객체를 생성하는 생성패턴 중 하나이다. 원형패턴을 사용함으로써, 미리 원형으로 초기화를 해두고, 나중에 이와 같은 객체를 생성할때, 다시 초기화하지 않아도 되는 편리성을 제공한다. 즉, 새로운 객체는 일반적인 방법으로 객체를 생성(create)하는 고유의 비용이 매우 클 때, 이 비용을 감내하지 않을 수 있게 해준다. 또한, 런타임에 새로운 제품을 추가 및 삭제가 가능하고, 값들을 다양화할 수 있다. 일반적으로 원형패턴의 구조는 다음과 같다. 원형 패턴을 구현하기 위해서는 원형클래스를 다루는 원형 관리자가 있어야한다. 그리고, 복사를 해야하기 때문에, Clone연산이 필요하다. 간단하게 구현해보자. 게임에서 흔히 나..
여러 패턴이 함께 사요이되는 형태를 Compound패턴이라고 한다. 이 중 가장 대표적인 MVC(Model, View, Controller)패턴에 대해 알아보자. MVC패턴은 모델과 뷰를 분리하고 그 사이에 제어를 하는 Controller를 두는 형태이다. 모델 : 응용의 데이터와 데이터를 조작하기 위한 규칙이 구현됨 뷰 : 외부로 보여지는 부분 컨트롤러 : 모델의 변 위 이미지 처럼 사람이 보는 쪽은 View이며, 리모컨으로 컨트롤 해준다. 실제 MP3의 경우는 View이면서 Controller이기도 하다. 다른 패턴과의 사용 원격 프록시 패턴 : 뷰와 모델관계를 클라이언트-서버 모델로 쉽게 확장 가능하다. Composite 패턴 : Controller는 오직 가장 상위 Component에게만 upda..
StatePattern : 객체 내부 상태가 변경되었을 때 행동 패턴을 바꿀 수 있도록 해준다. StatePattern을 구현하는 방법에는 여러가지가 있다. 1. State-driven transition 2. Context-driven transition 3. Singleton, State-driven transition 4. Singleton, Context-driven transition 5. + 열거형을 통한 방법 (context-driven, state-driven) 1. State-driven transition 2. Context-driven transition 이 두 방식을 구현해보자면, 아래와 같다. main Door door = new Door(); door.close(); door.l..
Template패턴 상위 클래스에서는 처리의 뼈대(program skeleton of analgorithm)를 결정하고, 하위 클래스에서는 구체적인 내용을 결정한다. -> 의존성 부패(dependency rot) 문제를 방지 Concrete Method: Template 메소드가 정의된 클래스에 완전히 정의되는 메소드로 하위 클래스에서는 재정의하지 않아야 하는 연산. 다른 말로 complete method라 함 (자바에서 final 키워드로 수식) Abstract Method: - 하위에서 반드시 정의 Template 메소드가 정의된 클래스에 선언만 되어 있는 추상 메소드로 하위 클래스에서 반드시 정의하여야 하는 연산 Hook Method: - 선택적 정의 Template 메소드가 정의된 클래스에 기본 ..
어댑터(Wrapper) 클래스는 기존 클래스에 대한 수정 없이 서로 직접적으로 상호작용할 수 없는 두 클래스를 상호작용할 수 있도록 해준다.즉, ‘이미 제공되어 있는 것’과 ‘필요한 것’의 차이를 없애줄 수 있는 패턴 예) A라는 회사에서 B라는 회사에서 만든 코드를 자기회사에서 만든 회사의 코드와 연동시킬 때, 코드를 받을 때 마다 수정할 순 없다. 이때사용되는 것이 Adapter패턴!! AdpaterPattern의 구현은 is-a 또는 has-a 로 구현된다. -------------------------------------------------------------------------------------------------------------- User라는 클래스가 있을 때, UserAda..
CommandPattern을 사용하다 보면 슬롯이 아직 Command객체가 null상태인데 execute()하려는 경우 java.lang.NullPointerException이라는 예외가 발생할 경우가 있다. 이런 경우를 처리하기위해서는 if(onCommands[slot] != null) 과같은 조건문을 통해 걸러주어야한다. 만약 조건문 이외의 다른 처리방법이 있을까? 바로 초기화를 시켜놓는 방법이다. Command라는 인터페이스를 가지는 빈 클래스를(noCommand) 생성하여 모두 이 클래스로 초기화 시켜주는 방법이 있다. for(int i=0; i
1. Singleton public class SerialNumberGenerator { private int count = 0; private SerialNumberGenerator() { } private static class SerialHolder { private static final SerialNumberGenerator serial = new SerialNumberGenerator(); } public static SerialNumberGenerator getInstance() { return SerialHolder.serial; } public int getNext() { return ++count; } } public class SerialNumberGenerator { private ..
자바에서 제공하는 java.util.Observable의 단점 Observable의 단점은 인터페이스가 아닌 클래스이다.어떤 한 클래스가 Obsever Pattern을 적용시키기위해 Observable을 상속받아야한다고치자.부모클래스가 없다면 다행이지만, 부모클래스가 존재한다면 Observable클래스를 상속받을 수 없다.. 이를 해결하기 위해서는 어떻게 할까?두가지 방법을 제시할 수 있다. 하나는 직접 Observer를 구현하여 적용시키는 것이고, 또 다른 하나는 패턴을 적용하고자 하는 클래스에서 has a 로 클래스를 가지고 그 클래스에서 Observer를 상속받는 것이다. 다만, has a로 사용하게되면 중복되는 함수를 써야될 수 밖에 없을 것이다..
- Total
- Today
- Yesterday