프로그래밍/DesignPattern 17

템플릿/콜백 과 프록시 의 차이(?)

템플릿/콜백 과 프록시 가 왠지 겹친다.. 템플릿/콜백 은 변하지 않는 템플릿을 정의하고 인자로 콜백을 갖는다. class SomeTemplate public void someWork(SomeCallback someCallback){ try{ someCallback.callbackWork(); }catch(){} } 대략 이런식이다.. 그리고 클라이언트가 호출할 때 callBack을 직접 구현해서 넘겨준다. class SomeClient SomeTemplate someTemplate; public void clientWork(){ someTemplate.someWork(new SomeCallback(){ public void someCallbackMethod(){ do something work.... ..

응집도(cohesion)란 ?

응집도란 한 클래스 또는 모듈이 특정 목적 또는 역할을 얼마나 일관되게 지원하는지를 나타내는 척도라고 할 수 있다. 어떤 모듈 또는 클래스의 응집도가 높다는 것은 일련의 서로 연관된 기능이 묶여있다는 것을, 응집도가 낮다는 것은 서로 상관 없는 기능들이 묶여있다는 것을 뜻한다. 사실 응집도는 단일 역할 원칙에서만 쓰이는 용어는 아니고, 좀더 광범위한 용도로 쓰이는 용어다. 하지만 그 둘은 서로 밀접하게 연관되어 있다. 이 원칙(단일 역할 원칙)을 잘 따르는 클래스는 두 개 이상의 역할을 맡고 있는 클래스에 비해 응집도가 높고, 관리하기도 더 용이한 편이다. ★이 포스트가 유용하셨다면 javaiyagi블로그를 구독하세요

템플릿 메소드 패턴 II

템플릿 메소드 패턴의 정의 - 템플릿 메소드 패턴에서는 메소드에서 알고리즘의 골격을 정의합니다. 알고리즘의 여러 단계 중 일부는 서브클래스에서 구현할 수 있습니다. 템플릿 메소드를 이용하면 알고리즘의 구조는 그대로 유지하면서 서브클래스에서 특정 단계를 재정의할 수 있습니다. 이 패턴은 간단하게 말하자면 알고리즘의 틀을 만들기 위한 것이다. 틀이란 일련의 단계들로 알고리즘을 정의한 메소드이다. 여러 단계 가운데 하나 이상이 추상 메소드로 정의되며, 그 추상 메소드는 서브클래스에서 구현된다. 이렇게 하면 서브클래스에서 일부분을 구현할 수 있도록 하면서도 알고리즘의 구조는 바꾸지 않아도 되도록 할 수 있다.

템플릿 메소드 패턴 I

* 알고리즘 캡슐화 public abstract class CaffeineBeverage{ final void prepareRecipe(){ // 템플릿내에서 알고리즘의 각 단계는 메소드로 표현된다. boilWater(); brew(); pourInCup(); adCondiments(); } abstract void brew(); // 서브클래스에서 처리되는 메소드도 있고 abstract void addCondiments(); void boilWater(){ // 어떤 메소드는 이 클래스 내에서 처리되기도 한다... System.out.println("물 끓이는 중"); } void pourInCup(){ System.out.println("컵에 따르는 중"); } } public class Tea ex..

퍼사드 패턴

퍼사드 패턴의 정의 : 어떤 서브시스템의 일련의 인터페이스에 대한 통합된 인터페이스를 제공한다. 퍼사드에서 고수준 인터페이스를 정의하기 때문에 서브시스템을 더 쉽게 사용할 수 있다. 퍼사드 패턴은 디자인 원칙의 최소지식원칙 을 준수한 패턴으로 볼수 있다. 퍼사드는 클라이언트를 복잡한 서브시스템과 분리시켜주는 역할을 한다. 퍼사드 패턴에서는 서브시스템을 가지고 퍼사드를 만들고, 실제 작업은 서브클래스에 맡긴다.

어댑터 패턴

public interface Duck(){ public void quack(); public void fly(); } public class MallardDuck implements Duck{ public void quack(){ System.out.println("Quack"); } public void fly(){ System.out.println("I'm flying"); } } public interface Turkey{ public void gobble(); //칠면조는 꽥꽥거리지 않습니다. 골골거리는 소리를 내죠. public void fly(); } public class WildTurkey implements Turkey{ public void gobble(){ System.out.pri..

싱글톤 패턴 II

싱글톤 패턴의 정의 - 싱글톤 패턴은 해당 클래스의 인스턴스가 하나만 만들어지고, 어디서든지 그 인스턴스에 접근할 수 있도록 하기 위한 패턴입니다. * 고전적인 싱글톤 패턴 구현법 public class Singleton{ private static SingleTon uniqueInstance; private Singleton() {} public static Singleton getInstance(){ if(uniqueInstance == null){ unuqueInstance = new Singleton(); } return uniqueInstance; } } 위 코드는 얼핏보기에 싱글톤 패턴을 정확히(안전히) 구현한 것 같지만 멀티 스레드 환경에서 실행하였을 때 문제점이 발생합니다. getInsta..

싱글톤 패턴 - 리틀 싱글톤(Little Lisper스타일의 문답)

리틀 싱글톤 객체를 어떻게 생성 합니까 ? - new MyObject(); 다른 객체에서 MyObject를 만들고 싶어한다면 어떻게 해야 하죠? MyObject에 대해서 new 연산자를 다시 쓸 수 있나요? - 물론 가능하죠. 클래스만 있으면 언제든지 인스턴스를 만들 수 있는 거죠? - 예, public 으로 선언된 거라면 별 문제 없습니다. 만약 public 으로 선언되지 않았으면요? - 만약 public 클래스로 선언하지 않은 클래스라면 같은 패키지 안에 있는 클래스에서만 인스턴스를 만들 수 있습니다.하지만 같은 패키지에 속한 클래스에서는 여전히 인스턴스를 두 개 이상 만들 수 있죠. 흠.. 흥미롭군요.. 이렇게 할수있는건 혹시 아나요 ? public MyClass{ private MyClass() ..

커맨드 패턴 II

Invoker loading ... ① 클라이언트에서 커맨드 객체 생성 ② setCommand()를 호출하여 인보커에 커맨드 객체를 저장 ③ 나중에 클라이언트에서 인보커한테 그 명령을 실행시켜 달라는 요청을 함 public interface Command{ public void execute(); } // 주문서에 해당하는 인터페이스. (백지 상태의 주문서) public class PizzCookCommand implements Command{ // 주문서 인터페이스를 구현한 클래스 // 주문서에는 주문할 메뉴와, 어느 주방장이 요리 할 지에 대한 정보가 있다. Cooker cooker; // 리시버 클래스(주방장) public PizzCookCommand (Cooker cooker){ //생성자에 요리..