[디자인 패턴] 3 어댑터 패턴(Adapter Pattern)

류재성's avatar
May 28, 2024
[디자인 패턴] 3 어댑터 패턴(Adapter Pattern)
 

1. 어댑터 패턴(Adapter Pattern) 이란?

 
💡
어댑터 패턴(Adapter Pattern)은 호환성이 없는 인터페이스를 가진 클래스들을 함께 동작하도록 만드는 패턴이다. 즉, 기존 클래스의 인터페이스를 다른 인터페이스로 변환하여 호환성을 유지하면서 재사용성을 높일 수 있다.
 
 
notion image
 
문지기가 동물 타입을 쫓아내고 있다.
그런데 만약 토끼라는 외부에서 만든 클래스가 있다면 어떨까? 이 토끼라는 외부 클래스는 내가 만든게 아니기 때문에 Animal 타입을 상속하거나 코드를 수정할 수도 없고, 새롭게 클래스를 만들기는 너무 비효율적이다.
 
외부에서 만든 토끼 클래스
package ex03.lib; // 목적: OuterRabbit을 문지기에 전달하는 법 (코드를 수정할 수 없다) // 외부에서 만든 토끼, 그래서 Animal 을 상속받지 않음 public class OuterRabbit { private String fullname = "토끼"; public String getFullname() { return fullname; } }
 
문지기
package ex03; //문지기 public class Doorman { public void 쫓아내(Animal animal) { System.out.println(animal.getName() + " 을 쫓아내"); } }
 
문지기는 animal 타입을 매개변수로 받고, 내부의 메서드도 getName을 호출하기 때문에 fullname을 가지고 있는 OuterRabbit 를 사용할 수 없다. 이때 어댑터 패턴을 사용해 OuterRabbit 을 사용해보자.

2. 구현해보기

 
 
코드는 전략 패턴의 코드에 추가한다.
 
package ex03; import ex03.lib.OuterRabbit; public class RabbitAdapter extends Animal{ private OuterRabbit outerRabbit ; public RabbitAdapter(OuterRabbit outerRabbit) { this.outerRabbit = outerRabbit; } @Override public String getName() { return outerRabbit.getFullname(); } }
 
💡
RabbitAdapter 라는 클래스를 새롭게 만든다. RabbitAdapter 클래스는 Animal 클래스를 상속받은 후 , OuterRabbit 을 변수로 받는다. 그리고 outerRabbit.getFullname() 를 리턴해주면 된다.
 
notion image
Share article

{CODE-RYU};