728x90
ADAPTER PATTERNS
이 패턴의 의도는 호환되지 않은 인터페이스를 호환되도록 변경해주는 것이다.
인터페이스 요구사항과 맞지 않을 때 어떻게 재 사용 가능할까?
서로 호환되지 않은 클래스끼리 호환시킬 수 있을까?
Adapter가 하는 역활은?
Adapter의 역할은 8핀 충전기를 C타입으로 바꾸는 포트라고 생각하면 좋다.
Solution
위에서 말한 것 처럼 8핀을 가진 아이폰 객체를 C타입의 충전기를 통해서 충전을 해보자.
Interface의 정의
interface로 C타입포트와 8핀 포트를 정의한다.
package AdapterPattern;
public interface CtypePort {
void charge();
}
package AdapterPattern;
public interface EightpinPort {
void charge();
}
class의 정의
위에서 정의한 interface를 가지고 SmartPhone, Iphone이라는 class를 만들어 보겠다.
package AdapterPattern;
public class Iphone implements EightpinPort {
private String product;
public Iphone(String product) {
this.product = product;
}
@Override
public void charge() {
System.out.println(product + " 충전중입니다.");
}
}
package AdapterPattern;
public class SmartPhone implements CtypePort {
private String product;
public SmartPhone(String product) {
this.product = product;
}
@Override
public void charge() {
System.out.println(product + " 충전중입니다.");
}
}
main
Main을 통해서 어떻게 쓰는지 알아 보겠다.
아래 코드는 충전할 수 있는 메소드(connect)를 정의하고 콜한 것이다.
package AdapterPattern;
public class main {
public static void main(String args[]) {
SmartPhone cType = new SmartPhone("갤럭시 S21");
Iphone eightType = new Iphone("아이폰13");
connect(cType);
// connect(eightType); //에러가 남
}
public static void connect(CtypePort phone) {
phone.charge();
}
}
Ctype은 충전이 잘 되는데 아이폰은 충전이 잘 안된다.
그러면 중간에 변환기를 줘서 C타입으로 만들어보자!
Adapter
CtypePort를 상속받지만 생성자 parameter는 Iphone을 받는다.
CtypPort의 Override한 charge함수 body에 smartPhone.charge() 콜해 나오게 해준다.
package AdapterPattern;
public class Adapter implements CtypePort {
private Iphone smartPhone;
public Adapter(Iphone smartPhone) {
this.smartPhone = smartPhone;
}
@Override
public void charge() {
smartPhone.charge();
}
}
수정 후 main
위에서 만든 Adapter를 통해 충전을 시켜보자!
package AdapterPattern;
public class main {
public static void main(String args[]) {
SmartPhone cType = new SmartPhone("갤럭시 S21");
Iphone eightType = new Iphone("아이폰13");
connect(cType);
connect(new Adapter(eightType)); // Adapter를 꽂자!
}
public static void connect(CtypePort phone) {
phone.charge();
}
}
충전이 잘된다!!
728x90
'Theory > Design Pattern' 카테고리의 다른 글
Factory Method Pattern (0) | 2022.04.10 |
---|---|
Builder Pattern (0) | 2022.03.29 |
ABSTRACT FACTORY PATTERN (0) | 2022.03.27 |
SINGLETON PATTERN (0) | 2021.07.20 |
Introduction (0) | 2019.06.08 |
댓글