<디자인패턴입문> 2. Adapter 패턴
by BFine반응형
www.yes24.com/Product/Goods/2918928
가. 무엇인가?
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. 기존 클래스는 그대로~
- 메서드로 따로 만들면 되지 않을까라는 의문이 생길 수 있다.
- 어댑터 패턴의 장점
=> 버그가 발생하더라도 기존 클래스에서는 문제가 없는 것이므로 어댑터 클래스만 확인하면 된다!
- 실제 우리는 기존 클래스 소스를 바꿔서 수정하려는 경향이 있다.
=> 이렇게 하면 기존 클래스를 다시 테스트 해야할 수도 있음
- 어댑터 패턴은 기존클래스를 전혀 수정하지 않고 목적 인터페이스에 맞추려는 것!
반응형
'개발서적 > 디자인패턴입문' 카테고리의 다른 글
<디자인패턴입문> 6. Abstract Factory 패턴 (0) | 2021.04.26 |
---|---|
<디자인패턴입문> 5. Bridge 패턴 (0) | 2021.04.25 |
<디자인패턴입문> 4. Prototype 패턴 (0) | 2021.04.24 |
<디자인패턴입문> 3. Template Method 패턴 (0) | 2021.04.22 |
<디자인패턴입문> 1. Iterator 패턴 (0) | 2021.03.28 |
블로그의 정보
57개월 BackEnd
BFine