inblog logo
|
goho
    디자인패턴

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

    gov's avatar
    gov
    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

    RSS·Powered by Inblog