본문 바로가기
Design Pattern

[Design Pattern] 어댑터 패턴(Adapter Pattern)

by jinjin98 2022. 10. 21.

 어댑터 패턴

 

어댑터는 변환기를 의미합니다. 변환기의 역할은 서로 다른 두 인터페이스가 통신할 수 있도록 하는 것입니다.

현실에서 변환기의 예를 들자면 핸드폰 충전기가 있습니다. 핸드폰을 직접 콘센트 전원에 끼워 연결할 수 없으니

핸드폰 충전기가 핸드폰과 콘센트 사이에서 둘을 연결해주는 변환기 역할을 합니다.

자바의 JDBC(Java Database Connectivity) 도 어댑터 패턴을 이용하는데요. 자바와 다양한 

데이터베이스 시스템을 하나의 인터페이스로 연동해서 조작할 수 있게 해줍니다.

 

예제 코드를 살펴보겠습니다.

 

public class ServiceA {
    void runServiceA() {
        System.out.println("ServiceA");
    }
}

 

public class ServiceB {
    void runServiceB() {
        System.out.println("ServiceB");
    }
}

 

public class Client {
    public static void main(String[] args) {
        ServiceA sa1 = new ServiceA();
        ServiceB sb1 = new ServiceB();
        
        sa1.runServiceA();
        sb1.runServiceB();
    }
}

 

먼저 어댑터 패턴을 적용하지 않은 코드입니다. main() 메서드에서 ServiceA 와 ServiceB 의 객체를 생성하고

각각의 메서드 runserviceA() 와 runserviceB() 를 메서드를 호출합니다.

서로 클래스 이름을 출력하는 비슷한 메서드이지만 메서드명이 드랍니다.

 

public class AdapterServiceA {
    ServiceA serviceA = new ServiceA();

    void runService() {
        serviceA.runServiceA();
    }
}

 

public class AdapterServiceB {
    ServiceB serviceB = new ServiceB();

    void runService() {
        serviceB.runServiceB();
    }
}

 

public class Client{
    public static void main(String[] args) {
        AdapterServiceA asa = new AdapterServiceA();
        AdapterServiceB asb = new AdapterServiceB();

        asa.runService();
        asb.runService();
    }
}

 

어댑터 패턴을 적용해보았습니다. 각 서비스 클래스에 맞는 어댑터 클래스를 생성하고 서비스 클래스 객채를

main() 메서드가 아닌 어댑터 클래스에서 생성하여 ServiceA 와 ServiceB 의 메서드를 runService() 라고 하는

같은 이름의 메서드로 호출해서 사용할 수 있게 해주는 변환기입니다. Client 는 변환기를 통해 runService() 라는

동일한 메서드명으로 두 객체의 메서드를 호출할 수 있습니다. 

이렇게 어댑터 패턴은 객체를 속성으로 만들어서 참조하며 호출당하는 쪽의 메서드를 호출하는 쪽의 코드에서

대응하도록 중간에 변환기를 통해 호출하는 패턴입니다.

 

이 포스팅은 자바 객체 지향의 원리와 이해의 내용을 참고하여 작성했습니다.

댓글