2023.07.31

어댑터

어댑터 패턴이란, 서로 다른 인터페이스를 가지는 객체들의 상호작용을 할 수 있게 하기위해 인터페이스를 연결해주는 디자인 패턴을 의미한다. 이 패턴을 사용하면 기존 클래스의 수정 없이 필요한 기능을 수행하도록 작성할 수 있다.


단점

어댑터 패턴은 호환되지 않는 인터페이스 연결을 위해 별도의 어댑터 클래스를 작성하는 방식으로 진행한다. 그렇기 때문에 어댑터 클래스를 구현해야하는 문제가 있고, 코드의 복잡성이나 유지 보수면에서 좋지 않을 수 있다는 것이다. 인터페이스 호환을 위해 해당 어댑터와 관련된 테스트와 처리시간 등을 가지기 때문에 무조건 적용하는 것은 옳지 않을 수 있다.


구현

우선 아래와 같이 인터페이스와 별도의 클래스가 있다고 가정하자.

public interface CType {
	void charge();
}

public class Samsung implements CType {
	@Override
	public void charge() {
		System.out.println("삼성 C type 충전!");
	}
}

public interface Atype {
	void connect();
}

public class Desktop implements Atype {
	@Override
	public void connect() {
		System.out.println("Desktop USB 연결!");
	}
}

여기에서 CType의 케이블을 호환하지 않는 컴퓨터에 어댑터를 이용해서 연결해 충전하려고 할 때 아래와 같이 작성할 수 있다. 우선 어댑터 부분을 구현하고, 오버라이드를 통해서 charge라는 메소드를 실행하면 노트북의 connect 기능을 사용할 수 있게 하는 것이다.


public class ChargerAdapter implements CType {

	private Atype desktop;

	public ChargerAdapter(Atype desktop) {
		this.desktop = desktop;
	}

	@Override
	public void charge() {
		desktop.connect();
	}
}

// 실제로 아래와 같이 객체를 생성한다.
Ctype Note10 = new ChargeAdapter(new Desktop());

Note10.charge();
// 출력
// Desktop USB 연결!!


이와 같이 구현이 다른 객체를 연결해서 사용할 수 있게 하는 방식으로, 각 팀별로 구현한 부분이 다를 때 사용한다.



Leave a comment