[디자인패턴]어댑터 패턴

gov's avatar
Nov 13, 2024
[디자인패턴]어댑터 패턴
💡
 Adapter Pattern 클래스나 인터페이스가 호환되지 않는 상황에서 호환성을 제공
  1. 타입 통일 못 건드리는 OuterTiger 클래스를 사용 가능하게, TigerAdapter 생성 및 상속받기
  1. override 구현
  1. OuterTiger의 String 타입 들고오기 - getName은 String 타입
      • 오버라이딩TigerAdapter가 Animal의 getName()을 재정의  OuterTiger의 getFullname() 메서드 결과 반환
      • 동적 바인딩Animal 타입으로 전달된 TigerAdapter 객체가 실행 시점에 getName() 메서드 호출하여 OuterTiger 이름 반환
public class App { public static void main(String[] args) { Doorman doorman = new Doorman(); OuterTiger outerTiger = new OuterTiger(); TigerAdapter ta = new TigerAdapter(outerTiger); Cat cat = new Cat(); Mouse mouse = new Mouse(); doorman.쫓아내(ta); doorman.쫓아내(cat); doorman.쫓아내(mouse); } }
// 못 건드리는 외부 라이브러리 public class OuterTiger { private String fullname = "호랑이"; public String getFullname() { return fullname; } }
// OuterTiger 와 Cat, Mouse 등과의 이질적인 것을 동일하게 맞추는 역할 public class TigerAdapter extends Animal { // 컴퍼지션: 어댑터가 대상 객체를 자신의 속성으로 포함 // new 객체 생성 > 생성 객체를 특정 클래스 필드 포함 시, 컴퍼지션 발생 OuterTiger tiger = new OuterTiger(); public TigerAdapter(OuterTiger tiger) { this.tiger = tiger; } @Override public String getName() { return tiger.getFullname(); } }
public class Doorman { public void 쫓아내(Cat cat) { System.out.println(cat.getName() + " 쫓아내"); } } public class Mouse { private String name = "쥐"; public String getName() { return name; } } public class Cat { private String name = "고양이"; public String getName() { return name; } }
Share article

goho