일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- GC
- JPA
- 자바
- Collection
- Java
- SpringBoot
- 이스티오
- list
- 토비의 스프링
- 자바 ORM 표준 JPA 프로그래밍
- Stack
- 백준
- spring
- OS
- K8s
- jvm
- Real MySQL
- 보조스트림
- 스프링
- IntellJ
- Stream
- 쿠버네티스
- gradle
- mysql
- 토비의 스프링 정리
- thread
- 스트림
- Kotlin
- redis
- MSA
Archives
- Today
- Total
인생을 코딩하다.
[Java] 어댑터 패턴(Adapter Pattern) 본문
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
반응형
'Java' 카테고리의 다른 글
[Java]일급 컬렉션 (0) | 2021.02.11 |
---|---|
[Java]프록시 패턴(Proxy Pattern) (0) | 2021.02.09 |
[Java] Strategy Pattern(전략 패턴) (0) | 2021.02.08 |
[Java] ConcurrentHashMap (0) | 2021.01.30 |
[Java] Fork Join Pool (0) | 2021.01.29 |
Comments