You will be fine

<디자인패턴입문> 2. Adapter 패턴

by BFine
반응형

www.yes24.com/Product/Goods/2918928

 

Java 언어로 배우는 디자인 패턴 입문

이 책은 디자인 패턴의 입문서입니다. GoF가 정리한 23개의 디자인 패턴을 하나씩 다루면서 객체 지향을 잘 모르는 초보자도 이해하기 쉽도록 정리하고 있습니다. 단순한 이론이나 논리을 제시하

www.yes24.com

 

가. 무엇인가?

 a. 어뎁터

  -  서로 다른 인터페이스를 가지는 클래스들을 연결하는 패턴

  -  이미 제공되어 있던것 과 필요한 것 사이의 차이를 없애주는 패턴

  -  감싼다는 의미의 Wrapper 패턴으로도 불린다.

        => 상품을 포장지로 씌워서 선물용으로 상품을 만드는 것과 비슷하다

 

나. 예제 - 상속

 a. Banner

  -  여기서 배너는 기존에 있던 클래스라고 가정한다.

 

 b. PrintBanner

  -  어뎁터 역할을 하는 클래스

  -  Banner를 상속받아 해당 기능을 그대로 구현한다.

public class PrintBanner extends Banner implements Print {
    public PrintBanner(String string) {
        super(string);
    }
    public void printWeak() {
        showWithParen();
    }
    public void printStrong() {
        showWithAster();
    }
}

 c.  Main

  -  Banner대신 어뎁터클래스인 PrintBanner로 기존 기능(Banner)는 달라지지 않는다.

  -  Banner 클래스는 제공되고 있는 것, Print 인터페이스는 필요한것, PrintBanner 클래스는 어댑터

public static void main(String[] args) {
  Print p = new PrintBanner("Hello");
  p.printWeak();
  p.printStrong();
}

 

다.  예제 - 위임

 a. Print

  -  위의 상속과는 다르게 인터페이스가 아닌 abstract 클래스로 선언한다.

  -  코드를 보면 Banner 클래스를 위임해서 처리하는 것을 볼 수 있다.

public class PrintBanner extends Print {
    private Banner banner;
    public PrintBanner(String string) {
        this.banner = new Banner(string);
    }
    public void printWeak() {
        banner.showWithParen();
    }
    public void printStrong() {
        banner.showWithAster();
    }
}

 

마. 언제쓰는가?

 a. 기존 클래스는 그대로~

  -  메서드로 따로 만들면 되지 않을까라는 의문이 생길 수 있다.

  -  어댑터 패턴의 장점

       => 버그가 발생하더라도 기존 클래스에서는 문제가 없는 것이므로 어댑터 클래스만 확인하면 된다!

  -  실제 우리는 기존 클래스 소스를 바꿔서 수정하려는 경향이 있다.

       => 이렇게 하면 기존 클래스를 다시 테스트 해야할 수도 있음

  -  어댑터 패턴은 기존클래스를 전혀 수정하지 않고 목적 인터페이스에 맞추려는 것

반응형

블로그의 정보

57개월 BackEnd

BFine

활동하기