어댑터 패턴
어댑터는 변환기를 의미합니다. 변환기의 역할은 서로 다른 두 인터페이스가 통신할 수 있도록 하는 것입니다.
현실에서 변환기의 예를 들자면 핸드폰 충전기가 있습니다. 핸드폰을 직접 콘센트 전원에 끼워 연결할 수 없으니
핸드폰 충전기가 핸드폰과 콘센트 사이에서 둘을 연결해주는 변환기 역할을 합니다.
자바의 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() 라는
동일한 메서드명으로 두 객체의 메서드를 호출할 수 있습니다.
이렇게 어댑터 패턴은 객체를 속성으로 만들어서 참조하며 호출당하는 쪽의 메서드를 호출하는 쪽의 코드에서
대응하도록 중간에 변환기를 통해 호출하는 패턴입니다.
이 포스팅은 자바 객체 지향의 원리와 이해의 내용을 참고하여 작성했습니다.
'Design Pattern' 카테고리의 다른 글
[Design Pattern] 싱글톤 패턴(Singleton Pattern) (0) | 2022.10.05 |
---|---|
[Design Pattern] 데코레이터 패턴(Decorator Pattern) (0) | 2022.10.03 |
[Design Pattern] 프록시 패턴(Proxy Pattern) (0) | 2022.10.03 |
[Design Pattern] 템플릿 콜백 패턴(Template Callback Pattern) (0) | 2022.10.03 |
[Design Pattern] 전략 패턴(Strategy Pattern) (0) | 2022.10.03 |
댓글