반응형
어댑터 패턴(Adapter Pattern)
우리가 기대하는 인터페이스와 다른 인터페이스를 제공하는 모듈이 있을 때 그중 누군가는 모듈을 맞추어야 한다.
하지만 어떤 모듈도 그럴 수 없을 때 어댑터는 클라이언트가 요청하는 타겟 인터페이스(Client Interface)를 만족하게 하고 호환되지 않는 다른 인터페이스를 불러 서로 영향을 받지 않고 사용 할 수 있도록 하는 패던이다.
즉, 한 클래스의 인터페이스를 클라이언트에서 사용하고자 하는 다른 인터페이스로 변환해주는 역할을 한다.
이때 어댑터를 이용하면 인터페이스 호환성 때문에 같이 쓸 수 없는 클래스들을 연결하여 쓸 수 있다.
타겟 인터페이스 : 클라이언트가 요구하는 인터페이스를 의미한다.


어댑터 패턴 클래스 다이어그램

어댑터 패턴 예제
Volt 클래스
전압값 및 get, set이 가능하다.
package AdapterPattern; public class Volt { private int volt; public Volt(int voltage) { this.volt = voltage; } public int getVoltage() { return this.volt; } public void setVoltage(int voltage) { volt = voltage; } }
Plug 인터페이스
플러그(돼지코)의 전압을 설정하고 connect라는 메서드를 통해 콘센트와 연결한다.
package AdapterPattern; public interface Plug { final Volt volt = new Volt(110); public void connect(Consent consent); }
Consent 클래스
콘센트를 정의한다.
콘센트 전압을 생성자로 만들어주고 get을 통해 전압을 알 수 있게 해준다.
package AdapterPattern; public class Consent { private Volt volt; public Consent(int voltage){ volt = new Volt(voltage); } public int getVoltage() { return volt.getVoltage(); } public void work() { System.out.println("플러그와 콘센트 연결되어 전자기기 동작"); } }
Adapter 클래스
플러그와 콘센트 전압을 맞추고 consent.work()를 통해 Specific Request()를 실행시킨다.
package AdapterPattern; public class Adapter implements Plug { @Override public void connect(Consent consent) { if(consent.getVoltage() == Plug.volt.getVoltage()) { System.out.println("볼트가 같아 어댑터가 따로 동작하지 않습니다."); } else { System.out.println("전압이 달라 어댑터가 플러그의 전압을 " + Plug.volt.getVoltage() + "에서 " + consent.getVoltage() + "로 변환합니다."); Plug.volt.setVoltage(consent.getVoltage()); System.out.println("플러그의 전압을 " + Plug.volt.getVoltage() + "로 어댑터가 변환시켰습니다."); } consent.work(); } }
AdapterMain 클래스
플러그, 콘센트를 만들고 플러그를 콘센트에 connect한다.
package AdapterPattern; public class AdapterMain { public static void main(String[] args) { Plug plug = new Adapter(); Consent consent = new Consent(220); plug.connect(consent); } }
반응형
'Applied > Design Pattern' 카테고리의 다른 글
상태 패턴(State Pattern) (0) | 2019.07.18 |
---|---|
브릿지 패턴(Bridge Pattern) (0) | 2019.07.15 |
팩토리 패턴(Factory Pattern) (0) | 2019.07.09 |
중재자 패턴(Mediator Pattern) (0) | 2019.07.07 |
반복자 패턴(Iterator Pattern, Cursor) (0) | 2019.07.06 |