객체지향 (OOP)/디자인 패턴

어댑터 패턴 (Adapter Patter)

고인돌개발자 2021. 6. 22. 21:54

정의 [위키피디아] :
  어댑터 패턴(Adapter pattern)은 클래스 인터페이스를 사용자가 기대하는 다른 인터페이스로 변환하는 패턴으로,

  호환성이 없는 인터페이스 때문에 함께 동작할 수 없는 클래스들이 함께 작동하도록 해준다. 

정의 [쉽게]
  집에서 사용하는 220V 전자 제품을 110V 로 사용하기 위해서는 어댑터가 필요하다.
  어떤 제품이든 어댑터만 있으면 동일하게 변환이 가능하다.

 

이런 어댑터의 기능을 갖게하는 개발 패턴을 어댑터 패턴이라고 한다.

아직 이해가 안된다면, 소스로 이해하자.


어댑터 패턴을 사용하기 이전 

 

ServiceA.java

public class ServiceA {

	public void runServiceA() {
		System.out.println("ServiceA");
	}
}

ServiceB.java

public class ServiceB {

	public void runServiceB() {
		System.out.println("ServiceB");
	}
}

ClientWithNoAdapter.java

/*
 * 어댑터 패턴을 사용하지 않음.
 */
public class ClientWithNoAdapter {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		ServiceA sa1 = new ServiceA();
		ServiceB sb1 = new ServiceB();	
		
		sa1.runServiceA();
		sb1.runServiceB();

	}

}

위 프로그램에서 

ServiceA, ServiceB 클래스는 유사한 기능을 한다고 했을때 
runServiceA, runServiceB 는 공통화 시켜 사용 가능하다.

<Class UML>


ServiceA 어댑터 패턴 사용하기 , AdapterServicA.java

public class AdapterServicA {
	
	ServiceA sa1 = new ServiceA();
	
	// 메서드 명을 동일하게 생성한다.
	void runService() {
		sa1.runServiceA();
	}

}

ServiceB 어댑터 패턴 사용하기 , AdapterServicB.java

public class AdapterServicB {

	ServiceB sb1 = new ServiceB();
	
	// 메서드 명을 동일하게 생성한다.
	void runService() {
		sb1.runServiceB();
	}
}

ClientWithAdapter.java

/*
 * 어댑터 패턴을 사용하여, 객체의 메소드를 동일하게 한다.
 * 향후 해당 소스의 runService는 interface 를 이용하여, 어댑터 기능을 사용할 수 있다.
 */
public class ClientWithAdapter {

	public static void main(String[] args) {
		
		AdapterServicA asa1 = new AdapterServicA();
		AdapterServicB asb1 = new AdapterServicB();
		
		asa1.runService();
		asb1.runService();
	}
}

 


참고서적 : 스프링 입문을 위하 자바 객체지향의 원리와 이해