어댑터 패턴 (Adapter Pattern)

초코칩·2023년 12월 5일
0

Design Pattern

목록 보기
2/5
post-thumbnail

어댑터 패턴이란?

어댑터를 번역하면 변환기라고 할 수 있다. 변환기의 역할은 서로 다른 두 인터페이스 사이에 통신이 가능하게 하는 것이다.

데이터베이스 관련 프로그램을 작성해 본 경험이 있다면 다양한 데이터베이스 시스템을 공통의 인터페이스인 ODBC 또는 JDBC를 이용해 조작할 수 있다는 사실을 알고 있을 것이다. 이러한 ODBC, JDBC가 어댑터 패턴을 이용해 다양한 데이터베이스 시스템을 단일한 인터페이스로 조작할 수 있게 해주기 때문이다. 자바 언어의 플랫폼별 JRE 또한 어댑터 패턴이다.

JDBC와 JRE는 OCP의 예시 중 하나이다. 결국 어댑터 패턴은 개방 폐쇄 원칙을 활용한 설계 패턴이라고도 할 수 있다. JDBC와 JRE가 어댑터의 역할을 수행하고 있는 것이다.

적용 전

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


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

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

적용 후

public class AdapterServiceA implements AdapterInterface {
	ServiceA sa1 = new ServiceA();
	void runService(){
    	sa1.runServiceA();
    }
}


public class AdapterServiceB implements AdapterInterface {
	ServiceA sa1 = new ServiceA();
	void runService(){
    	sa1.runServiceA();
    }
}

interface AdapterInterface {
	void runService();
}

public class ClientWithAdapter {
	public static void main(String[] args){
    	AdapterInterface asa1 = new AdapterServiceA();
        AdapterInterface asa2 = new AdapterServiceB();
        
        asa1.runService();
        asa2.runService();
    }
}

기존의 ServiceA와 ServiceB의 메서드를 runService()라고 하는 같은 이름의 메서드로 호출해서 사용할 수 있다.

정리

어댑터 패턴은 합성(객체를 속성으로 만들어 참조)하는 디자인 패턴으로, 당하는 쪽의 메서드를 호출하는 쪽의 코드에 대응하도록 중간에 변환기를 통해 호출하는 패턴이다.

profile
초코칩처럼 달콤한 코드를 짜자

0개의 댓글