inblog logo
|
[HootJem] 개발 기록 블로그
    java

    [Java] 디자인패턴 : 어댑터(Adapter) 패턴

    어댑터 패턴(Adapter Pattern)은 서로 호환되지 않는 인터페이스를 가진 두 개의 클래스를 연결하기 위해 사용하는 구조적 디자인 패턴이다.
    HootJem's avatar
    HootJem
    Aug 13, 2024
    [Java] 디자인패턴 : 어댑터(Adapter) 패턴
    Contents
    1. 어댑터 패턴이란?2. 어댑터 패턴의 주요 개념3. 예제

    1. 어댑터 패턴이란?

    💡
    어댑터 패턴(Adapter Pattern)은 서로 호환되지 않는 인터페이스를 가진 두 개의 클래스를 연결하기 위해 사용하는 구조적 디자인 패턴이다. 이 패턴을 통해 기존 클래스를 수정하지 않고도, 다른 클래스와 함께 동작하도록 할 수 있다. 즉, 어댑터는 하나의 인터페이스를 다른 인터페이스로 변환하여 호환되지 않는 클래스들이 함께 동작할 수 있게 하는것!
     

    2. 어댑터 패턴의 주요 개념

    • 타깃(Target) 인터페이스: 클라이언트가 사용하려고 하는 인터페이스. 예제에서는 Animal 클래스가 이에 해당함.
    • 어댑티(Adaptee): 기존에 클라이언트가 사용하려는 인터페이스와 호환되지 않는 클래스. 예제에서는 OuterRabbit 클래스가 어댑티에 해당.
    • 어댑터(Adapter): 타깃 인터페이스를 구현하고, 어댑티의 인터페이스를 타깃 인터페이스로 변환하는 클래스. 예제에서는 RabbitAdapter가 어댑터 역할을 함.
    • 클라이언트(Client): 타깃 인터페이스를 통해 어댑터를 사용하는 코드. 예제에서는 Doorman 클래스가 클라이언트.

    3. 예제

    먼저, 수정할 수 없는 외부 라이브러리의 클래스를 정의한다.
    public class OuterRabbit { private String fullname = "토끼"; public String getFullname() { return fullname; } }
    기존에 Animal 인터페이스를 구현한 클래스
    public abstract class Animal { abstract String getName(); } public class Mouse extends Animal { private String name = "쥐"; public String getName() { return name; } }
    Doorman 클래스는 Animal 객체들을 받아 처리한다.
    public class Doorman { public void getOut(Animal a){ System.out.println(a.getName()+" 저리가!"); } }
    그러나 OuterRabbit 클래스는 Animal을 상속받지 않기 때문에, Doorman이 OuterRabbit 객체를 처리할 수 없다. 이 문제를 해결하기 위해 어댑터 패턴을 사용.
    public class RabbitAdapter extends Animal { private OuterRabbit rabbit; public RabbitAdapter(OuterRabbit rabbit) { this.rabbit = rabbit; } @Override String getName() { return rabbit.getFullname(); } }
    RabbitAdapter는 Animal 과 is 관계가 아니지만 Rabbit 은 is 이기 때문에 상속을 받게된다.
    Aniaml 을 상속받게 됨에 따라 getName 을 오버라이드 하게 되고
    OuterRabbit 객체의 getFullname() 메서드를 호출한다. 이를 통해 OuterRabbit 객체가 Animal 객체처럼 동작할 수 있게 된다.
    public class App { public static void main(String[] args) { Mouse m1 = new Mouse(); Doorman d1 = new Doorman(); d1.getOut(m1); // "쥐 저리가!" 출력 RabbitAdapter adapter = new RabbitAdapter(new OuterRabbit()); d1.getOut(adapter); // "토끼 저리가!" 출력 } }
    이를 통해 Doorman 은 토끼와 쥐를 내쫓을 수 있게 된다.
     
    Share article
    Contents
    1. 어댑터 패턴이란?2. 어댑터 패턴의 주요 개념3. 예제

    [HootJem] 개발 기록 블로그

    RSS·Powered by Inblog