Java
[Java] 어댑터 패턴(Adapter Pattern)
Hyung1
2021. 2. 8. 19:52
728x90
반응형
어댑터패턴이란?
- 개체를 속성으로 만들어서 참조하는 디자인 패턴
- 호출당하는 쪽의 메서드를 호출하는 쪽의 코드에 대응하도록 중간에 변환기를 호출하는 패턴
- 한 클래스의 인터페이스를 클라이언트에서 사용하고자하는 다른 인터페이스로 변환한다. 어댑터를 이용하면 인터페이스 호환성 문제 때문에 같이 쓸 수 없는 클래스들을 연결해서 쓸 수 있다.
- 개방 폐쇄 원칙을 활용한 설계패턴
데이터베이스 관련 프로그램에서도 어댑터패턴을 볼 수 있다.
시스템을 공통의 인터페이스 ODBC 또는 JDBC를 이용해 조작할 수 있다는 사실을 알고 있을 것이다. 바로 ODBC/JDBC가 어댑터 패턴을 이용해 다양한 데이터베이스 시스템을 단일한 인터페이스로 조작할 수 있게 해주기 때문이다.
예제 코드를 통해 어댑터 패턴을 이해해보자. 먼저 어댑터 패턴이 적용되지 않은 코드다.
package DesignPattern.adapterPattern;
public class ServiceA {
void runServiceA() {
System.out.println("Service");
}
}
package DesignPattern.adapterPattern;
public class ServiceB {
void runServiceB() {
System.out.println("ServiceB");
}
}
package DesignPattern.adapterPattern;
import java.util.Objects;
public class ClientWithNoAdapter {
public static void main(String[] args) {
ServiceA sa1 = new ServiceA();
ServiceB sb2 = new ServiceB();
sa1.runServiceA();
sb2.runServiceB();
}
}
main() 메서드를 살펴보면 sa1참조 변수와 sb1 참조 변수를 통해 호출하는 각 메서드가 비슷한 역할을 하지만 메서드명이 다른 것을 8번째와 9번째 라인에서 볼 수 있다.
아래
그림은 어댑터 패턴을 적용하기전의 시퀀스 다이어그램이다.
이제 어댑터 패턴을 적용해 메서드명을 통일해보자. ServiceA에 대한 변환기와 ServiceB에 대한 변환기를 아래처럼 추가한다.
package DesignPattern.adapterPattern;
public class AdapterServiceA {
ServiceA sa1 = new ServiceA();
void runService() {
sa1.runServiceA();
}
}
package DesignPattern.adapterPattern;
public class AdapterServiceB {
ServiceB sb1 = new ServiceB();
void runService() {
sb1.runServiceB();
}
}
package DesignPattern.adapterPattern;
public class ClientWithAdapter {
public static void main(String[] args) {
AdapterServiceA asa1 = new AdapterServiceA();
AdapterServiceB asb1 = new AdapterServiceB();
asa1.runService();
asb1.runService();
}
}
어댑터 패턴을 적용한 후의 시퀀스 다이어그램
클라이언트가 변환기를 통해 runService()라는 동일한 메서드명으로 두 객체의 메서드를 호출하는 것을 볼 수 있다.
출처 :
728x90
반응형