Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- regex_search
- influxdb 설치
- 정규식 컴파일
- c3 축 가리기
- c++ 정규식
- selinux port 등록
- 백준
- c3 축 없애기
- python popen
- semanage
- gcc regex
- c3 step graph
- c3 second
- python os
- subporcess path
- InfluxDB
- grafana dashboard
- CentOS7
- snmp test
- 1697
- telegraf
- g++ 업데이트
- 정규식 문자열 출력
- c3 초
- centos pyhon 설치
- gcc 업데이트
- linux시간으로 변경
- snmp
- python subprocess
- 정규식 활용
Archives
- Today
- Total
리셋 되지 말자
어댑터 패턴(Adapter Pattern) 본문
어댑터를 번역하면 변환기(converter)라고 할 수 있다. 변환기의 역할은 서로 다른 두 인터페이스 사이에 통신이 가능하게 하는 것이다.(ex 플러그 전원과 핸드폰을 연결해주는 충전기-충전기가 변환기의 역할을 수행)
ODBC/JDBC가 어댑터 패턴을 이용해 다양한 데이터베이스 시스템을 단일한 인터페이스로 조작할 수 있게 한다.
JRE 또한 어댑터 패턴이다.
결국 어댑터 패턴은 개방 폐쇄 원칙(OCP)를 활용한 설계 패턴이라고 할 수 있다.
어댑터 패턴이 적용되지 않은 코드
- ServiceA.java
package adapterPattern;
public class ServiceA {
void runServiceA() {
System.out.println("ServiceA");
}
}
- ServiceB.java
package adapterPattern;
public class ServiceB {
void runServiceB() {
System.out.println("ServiceB");
}
}
- ClientWithAdapter.java
package adapterPattern;
public class ClientWithNoAdapter {
public static void main(String[] args) {
ServiceA sa1 = new ServiceA();
ServiceB sb1 = new ServiceB();
sa1.runServiceA();
sb1.runServiceB();
}
}
- main() 메서드를 살펴보면 sa1 참조 변수와 ssb1 참조 변수를 통해서 호출하는 각 메서드가 비슷한 일을 하지만 메서드명이 다른 것을 볼 수 있다.
어댑터 패턴이 적용된 코드
어댑터 패턴을 적용해 메서드명을 통일한다.
ServiceA에 대한 변환기와 ServiceB에 대한 변환기를 추가한다.
- AdapterServiceA
package adapterPattern;
public class AdapterServiceA {
ServiceA sa1 = new ServiceA();
void runService() {
sa1.runServiceA();
}
}
- AdapterServiceB
package adapterPattern;
public class AdapterServiceB {
ServiceB sb1 = new ServiceB();
void runService() {
sb1.runServiceB();
}
}
- ClientWithAdapter
package adapterPattern;
public class ClientWithAdapter {
public static void main(String[] args) {
AdapterServiceA asa1 = new AdapterServiceA();
AdapterServiceB asb1 = new AdapterServiceB();
asa1.runService();
asb1.runService();
}
}
- ClientWithAdapter에서 변환기를 통해 service()라는 동일한 메서드명으로 두 객체의 메서드를 호출하는 것을 볼 수 있다.(변환기들이 인터페이스를 구현하게 해서 더 개선할 수도 있음.)
정리
어댑터 패턴은 합성, 즉 객체를 속성으로 만들어서 참조하는 디자인 패턴이다.
"호출당하는 쪽의 메서드를 호출하는 쪽의 코드에 대응하도록 중간에 변환기를 통해 호출하는 패턴"
잘 모르겠지? 여기 참고해라 나 자신아 https://niceman.tistory.com/141 https://gdtbgl93.tistory.com/141
어댑터 패턴의 강점
기존 클래스의 소스 코드를 전혀 수정하지 않고 타겟 인터페이스 맞게 동작하도록 한다!
'Java(폐지) > 디자인 패턴' 카테고리의 다른 글
템플릿 메서드 패턴(Template Method Pattern) (0) | 2020.08.04 |
---|---|
싱글톤 패턴(Singleton Pattern) (0) | 2020.08.04 |
데코레이터 패턴(Decorator Pattern) (0) | 2020.08.04 |
프록시 패턴(Proxy Pattern) (0) | 2020.08.04 |
디자인 패턴 이란? (0) | 2020.07.21 |
Comments