[심화] 5. Adapter

백하림's avatar
Jul 25, 2025
[심화] 5. Adapter

Adapter (어댑터)

  • Proxy와 별개로 해당 객체의 다른 책임을 대신 받아서 처리할 수 있는 객체
  • 기존 시스템의 구조를 해치지 않으면서 새 클래스를 기존 시스템에 넣을 수 있도록 변환

어댑터는 책임을 위임 받는 역할이 아님

  • 어댑터는 새로운 기능이 추가되어야 할 때 기존 시스템에 맞춰서 끼우기 위한 도구
  • 프록시처럼 역할을 위임받는 역할이 아니지만 SRP, DIP를 수행하기 위해 비슷한 역할을 수행할 수 있음

Q1. 동물의 객체 이름이 name이 아닌 fullName으로 왔다면?

  • 동물 객체는 name을 이용한 getName을 사용
  • OuterTiger는 fullName을 사용하므로 메소드를 맞추어줘야 하는데, 이를 직접 건드리면 안됨
    • 다른 곳에서 메소드를 사용 중일 경우 모든 곳을 손봐야 함
// 외부 요소 public class OuterTiger { private String fullName = "호랑이"; public String getFullName() { return fullName; } }

A : 기존 동물 객체에서 사용하던 name으로 맞춰주는 어댑터가 필요함

// Adapter : Animal 객체에 OuterTiger를 맞추기 위한 수단 public class TigerAdapter extends Animal{ // DI private OuterTiger outerTiger; public TigerAdapter(OuterTiger outerTiger) { this.outerTiger = outerTiger; } // extends @Override String getName() { return outerTiger.getFullName(); } } public class App { public static void main(String[] args) { Mouse m1 = new Mouse(); Doorman d1 = new Doorman(); Cat c1 = new Cat(); // 기존 코드는 놔두면서 어댑터만 추가함 TigerAdapter ta = new TigerAdapter(new OuterTiger()); d1.쫓아내(m1); d1.쫓아내(c1); d1.쫓아내(ta); } }
Share article

harimmon