반응형

어댑터 패턴(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