본문 바로가기
Theory/Design Pattern

ADAPTER PATTERN

by y.j 2021. 7. 22.
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

댓글