Adapter Pattern
Adapter Pattern 이란?
- Adapter Pattern은 A라는 클래스의 메서드나 기능들을 B에서도 그대로 사용할 수 있게 중간매개체인 교환장치를 만들어 주어 사용하는 패턴이며 Wrapper 패턴이라고도 불린다.
한국에서는 220볼트를 사용하지만 해외에서는 110볼트를 사용해야 한다. 그래서 220볼트를 110볼트로 사용하기 위해서는 중간매게체인 어댑터(Adapter)가 필요하다. 즉, 변환장치같은 역할을 하는 것이다.
Adapter Pattern의 종류
1. 클래스에 의한 Adapter Pattern
- 상속을 이용한 Adapter Pattern이다.
2. 인스턴스에 의한 Adapter Pattern
(위임을 사용한 Adapter Pattern)
1. 클래스에 의한 Adapter Pattern
- Banner 클래스는 이미 제공되어 있는 것으로 메소드 전 후에 *을 붙여 표시하는 showWithParen이 있다.
- Print 인터페이스는 Banner 클래스를 사용하여 Print 인터페이스를 충족시키는 클래스를 만드는역할로 어댑터를 만드는 역할을 한다.
- PrintBanner 클래스는 어댑터 역할을 하는 것으로 이미 제공되어 있는 Banner 클래스를 상속하여 필요로하는 Print 인터페이스를 구현한다.
Banner.java
public class Banner {
private String str;
public Banner(String str) {
this.str = str;
}
public void showWithParen() {
System.out.println("("+str + ")");
}
public void showWithAster() {
System.out.println("*"+str +"*");
}
}
PrintBanner.java
public class PrintBanner extends Banner implements Print {
public PrintBanner(String str) {
super(str);
}
@Override
public void printWeak() {
showWithParen();
}
@Override
public void printStong() {
showWithAster();
}
}
Print.java
public interface Print {
public abstract void printWeak();
public abstract void printStong();
}
Main.java
public class Main {
public static void main(String[] args) {
Print p = new PrintBanner("adapter");
p.printWeak();
p.printStong();
}
}
Class Adapter Pattern
Adaptee : 개조되는쪽의 역할
Adapter : 개조하려는 구현부
class Adapter extends Adaptee implements SomeInterface {
...
public void methodA() {
super.methodB();
}
...
}
2. 위임을 사용한 Adapter Pattern
위임은 누군가에게 맡긴다는 의미로 Java에서 위임은 어떤 메서드의 실제 처리를 다른 인스턴스의 메서드에 맡기는 것을 말한다.
1번과의 차이점은 Print인터페이스를 추상 클래스로 바꾸고 PrintBanner에서 Print 추상클래스를 상속하고 Banner는 컴포지션을 한것이다.
컴포지션은 Has-a 포함관계이다. 즉 위임을 한것이다. PrintBanner에서 Banner를 인스턴스화 하여 사용하겠다고...
즉, Banner 클래스를 이용하여 Print클래스와 동일한 메서드를 갖는 클래스를 구현하는 것이다.(java에서는 두 개의 클래스를 동시에 상속 할 수 없기 때문에)
Print 인터페이스에서 추상클래스로 바꼇다.
Print.java
public abstract class Print {
public abstract void printWeak();
public abstract void printStong();
}
PrintBanner를 보면 Print 추상클래스를 상속받아 오버라이드를 하였고 Banner는 컴포지션하여 메서드를 사용하는 것을 볼 수 있다.
PrintBanner.java
public class PrintBanner extends Print {
//has-a composition
private Banner banner;
public PrintBanner(String str) {
//banner new instance
this.banner = new Banner(str);
}
@Override
public void printWeak() {
banner.showWithParen();
}
@Override
public void printStong() {
banner.showWithAster();
}
}
'Software Engineering > Design Pattern' 카테고리의 다른 글
Observer Pattern(관찰자 패턴) (0) | 2023.04.20 |
---|---|
Template Method Pattern(템플릿 메서드 패턴) (0) | 2016.04.26 |
Iterator Pattern (0) | 2016.04.21 |
Singleton Pattern (0) | 2016.01.31 |