3. 어댑터 패턴(Adapter Pattern)

서주홍's avatar
Aug 14, 2024
3. 어댑터 패턴(Adapter Pattern)
💡
어댑터 패턴은 객체지향 디자인 패턴 중 하나로, 호환되지 않는 인터페이스를 가진 클래스들이 서로 상호작용할 수 있도록 도와주는 패턴입니다. 마치 전자기기의 어댑터가 서로 다른 규격을 맞춰주는 것처럼, 어댑터 패턴은 기존 클래스를 수정하지 않고도 다른 인터페이스를 사용할 수 있게 해줍니다.
 

■ 1. 어댑터 패턴을 사용하는 경우

  • 이미 만들어진 무언가가 우리 시스템에 호환되지 않을 때
    • 외부에서 가져온 라이브러리나 클래스가 우리 시스템의 인터페이스와 맞지 않을 때, 어댑터를 사용해 호환성을 맞춥니다.
  • 아직 구현되지 않은 인터페이스에 대한 틀을 만들어놓고 개발할 때
    • 시스템에 필요한 인터페이스를 미리 정의해 두고, 그에 맞는 어댑터를 만들어서 이후에 개발될 클래스를 호환되도록 유도할 수 있습니다.
 
 

■ 2. 예제 코드

// Animal 클래스 정의 package ex03; public abstract class Animal { abstract String getName(); } // 쥐 클래스 정의 public class Mouse extends Animal { private String name = "쥐"; @Override public String getName() { return name; } } // 외부에서 제공된 클래스 package ex03.lib; public class OuterRabbit { private String fullname = "토끼"; public String getFullname() { return fullname; } } // 어댑터 클래스 정의 package ex03; import ex03.lib.OuterRabbit; public class RabbitAdapter extends Animal { private OuterRabbit rabbit; public RabbitAdapter(OuterRabbit rabbit) { this.rabbit = rabbit; } @Override String getName() { return rabbit.getFullname(); } } // 어댑터 패턴 사용 예제 package ex03; import ex03.lib.OuterRabbit; public class App { public static void main(String[] args) { Animal mouse = new Mouse(); Animal tiger = new Tiger(); Doorman d1 = new Doorman(); d1.쫒아내(tiger); d1.쫒아내(mouse); RabbitAdapter rabbit = new RabbitAdapter(new OuterRabbit()); d1.쫒아내(rabbit); } }
  • 이 예제에서 OuterRabbit 클래스는 기존의 Animal 클래스와 호환되지 않지만, RabbitAdapter 클래스를 통해 OuterRabbitAnimal처럼 사용할 수 있게 됩니다. 어댑터 패턴을 사용하면 기존 클래스를 수정하지 않고도 새로운 클래스를 시스템에 통합할 수 있습니다.
 
 

■ 3. 정리

💡
어댑터 패턴은 외부 라이브러리를 끌어와 사용하고 싶은데, 시스템과 맞지 않는 경우 이를 호환시켜 주는 패턴입니다. 마치 220V 전압을 5V로 낮춰주는 어댑터와 같은 역할을 합니다.

■ 어댑터 패턴을 사용하는 시점

  • 이미 만들어진 클래스가 시스템에 호환되지 않을 때.
  • 아직 만들어지지 않았지만, 특정 규격에 맞게 만들 필요가 있을 때.
 

■ 알아두어야 할 것

  • 어댑터 패턴은 기존에 호환되지 않는 무언가가 있을 때 사용됩니다.
  • 프록시 패턴은 기존 클래스에 부가 기능을 추가할 때 사용됩니다.
 
 
💡
정리 사이트 참고
 
Share article

maestrojava