"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

오늘이군

디자인패턴 요약 본문

삶../프로그래밍

디자인패턴 요약

오늘이군 2017. 5. 16. 17:56
반응형

1. 추천 글

http://jusungpark.tistory.com/category/DesignPattern

https://www.youtube.com/watch?v=w9rZCy90Q4M


2. 개요

가. 사전지식 : 상속, 인터페이스, 합성(다른 객체를 속성으로 가짐), 위임

----------------> 참고(개인경험) : 디자인패턴이 어려운이유OO특성/SOLID 에 대해 제대로 이해가 안되서 그렇습니다. (step by step)

나. 종류

1) Creational Patterns(생성 패턴)

Singleton / Prototype / Builder / Factory Method / Abstract Factory

2) Structural Pattenrs(구조 패턴)

Proxy / Adapter / Bridge / Composite / Decorator / Facade / Flyweight

3) Behavioral Patterns(행동 패턴)

Chain of Responsibility / Command / Interpreter / Iterator / Mediator / Memento / Observer / State / Strategy / Template Method / Visitor


3. Adapter (변환기) 패턴

가. 다른서비스가 제공하는 클래스가 기존시스템과 규격이 다른 경우 중간에 대리자를 두는 패턴

나. 예시 (객체 어댑터 패턴)

public class Adaptee {

public void specificRequest() { print("specificRequest"); }

}

public interface Target {

public void request();

}

public class Adapter implements Target {

Adaptee adt = new Adaptee();

public void request() {

adt.specificRequest();

}

}

public class Client {

public static void main(String[] args) {

Target target = new Adapter();

target.request();

}

}


4. Proxy (대리자) 패턴

가. 서비스가 제공하는 규격에 별도의 로직을 처리해서 제공하고 싶을 때 제어 흐름을 조정하기 위한 목적으로 중간에 대리자를 두는 패턴

나. 예시

1) 적용 전

public class ClientWithNoProxy {

Service service = new Service();

service.runSomething();

}

2) 적용

public interface IService() { String runSomething(); }

public class Service implements IService {

public String runSomething() { return "good"; }

}

public class Proxy implements IService {

IService service1;

public String runSomething() {

print("호출에 대한 흐름 제어가 주목적, 추가 로직 삽입"); 

service1 = new Service();

print("추가 로직 삽입"); 

return service1.runSomething();

}

}

public class ClientWithProxy {

IService proxy = new Proxy();

proxy.runSomething();

}


5. Decorator (장식자) 패턴

가. 서비스가 제공하는 규격에 장식을 더해서 반환하고 싶을 때 메소드 호출의 반환값에 변화를 주기 위해 중간에 장식자를 두는 패턴 (프록시와 동일함 / 다른점 : 반환값에 변화)


6. Singleton 패턴

가. 해당 클래스의 인스턴스 즉 객체가 하나만 만들어지고, 어디서든지 그 인스턴스에 접근할 수 있도록 하기 위한 패턴

나. 예시

public class Singleton {

private static Singleton uniqueInstance = new Singleton();

private Singleton(){}

public static synchronized Singleton getInstance(){

return uniqueInstance;

}

}

7. template(견본) method 패턴

가. 상위클래스의 견본메서드에서 하위클래스가 오버라이딩한 메서드를 호출하는 패턴

나. 예시

1) 적용전

public class Dog {

public void playWithOwner() {

print("귀염둥이 이리온~~");

print("명~ 멍~");

print("꼬리 살랑 살랑~");

print("잘했어");

}

}

public class Cat {

public void playWithOwner() {

print("귀염둥이 이리온~~");

print("야옹~ 야옹~");

print("꼬리 살랑 살랑~");

print("잘했어");

}

}

2) 적용후

public abstract class Animal {

// 템플릿 메서드

public void playWithOwner() {

print("귀염둥이 이리온~~");

play();

runSomething();

print("잘했어");


}

// 추상 메서드

abstract void play();

// Hook(갈고리) 메서드

void runSomething() {

print("꼬리 살랑 살랑~");

}

}

public class Dog Extends Animal {

@Override

// 추상 메서드 오버라이딩

public void play() {

print("명~ 멍~");

}

}

public class Driver {

main() {

Animal bolt = new Dog();

bolt.playWithOwner();

}

}

※ Animal 의 playWithOwner 를 실행하다가 play() 를 만났을 때 하위클래스인 Dog 에서 재정의 한 것을 불러다 씀


8. factory(공장) method 패턴

가. 오버라이드된 메서드가 객체를 반환하는 패턴


9. strategy (전략) 패턴

가. 클라이언트가 전략을 생성해 전략을 실행할 컨텍스트에 주입하는 패턴, 알고리즘군을 정의하고 각각 캡슐화하여 교환해서 사용할 수 있도록 만든다. 스트래티지패턴을 활용하면 알고리즘을 사용하는 클라이언트와는 독립적으로 알고리즘을 변경 할 수 있다.

나. 예시

public class Dirver {

main() {

Strategy strategy = null;

Soldier rambo = new Soldier();


strategy = new StrategyGun();

rambo.runCotext(strategy);

strategy = new StrategySword();

rambo.runCotext(strategy);

strategy = new StrategyBow();

rambo.runCotext(strategy);

}

}

public class StrategyGun implements Strategy {

@Override

public void runStrategy() {

print("탕탕");

}

}

public class Soldier {

void runCotext(Strategy strategy) {

print("전투시작");

strategy.runStrategy();

print("전투종료");

}

}

10. template(견본) callback(회신) 패턴

가. 전략패턴변형, 전략을 익명 내부 클래스로 구현한 전략패턴

나. 예시

rambo.runCotext(new Strategy() {

@Override

public void runStrategy() {

print("탕탕");

}

});

11. facade(퍼사드) 패턴

가. 어떤 서브시스템의 일련의 인터페이스에 대한 통합된 인터페이스를 제공한다.

나. 예시

public watchMovie(Movie movie) {

Screen.down();

Project.on();

Amp.on();

Dvd.on();

Dvd.play(movie);

Light.on();

}


반응형

'삶.. > 프로그래밍' 카테고리의 다른 글

스프링 삼각형 - AOP  (0) 2017.05.16
스프링 삼각형 - IoC/DI  (0) 2017.05.16
객체지향설계 5원칙 - DIP  (0) 2017.05.16
객체지향설계 5원칙 - ISP  (0) 2017.05.16
객체지향설계 5원칙 - LSP  (0) 2017.05.16

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
Comments