Adapter Pattern

YeJI Kang·2021년 6월 12일
0

Head First Design Pattern

목록 보기
9/14

객체지향 어댑터(Adapter)

어댑터(Adapter)는 클라이언트로부터 요청을 받아서 업체에서 제공하는 클래스에서 받아들일 수 있는 형태의 요청으로 변환시켜주는 중개인 역할을 합니다.

어댑터 패턴(Adapter Pattern) 예시

reference code

레퍼런스 코드를 확인해보면 클라이언트에서 Turkey 를 기존에 제공하는 클래스인 Duck 으로 변환시켜주기 위해 TurkeyAdapter 코드를 추가하였습니다.

TurkeyAdapter.java

public class TurkeyAdapter implements Duck {
    Turkey turkey;

    public TurkeyAdapter(Turkey turkey) {
        this.turkey = turkey;
    }

    @Override
    public void quack() {
        turkey.gobble();
    }

    @Override
    public void fly() {
        for(int i = 0; i < 5; i++) {
            turkey.fly();
        }
    }
}

다이어그램으로 살펴보면 아래와 같습니다.

  1. 클라이언트(Client)에서는 Duck 인터페이스를 가지고 있습니다. 하지만 실제 구현된 구상 클래스는 TurkeyAdapter 입니다.
  2. TurkeyAdapter 에서는 Turkey 인터페이스를 가지고 있습니다. 클라이언트로부터 받은 요청을 Turkey 인터페이스에 대한 메소드로 변환합니다.
  3. 클라이언트에서는 TurkeyAdapter 에서 무엇을 하는지 모른 채로 호출 결과를 받습니다.

어댑터 패턴(Adapter Pattern) 정의

(https://images.velog.io/images/ye-geeee/post/d22c6f80-0836-43c2-9657-38c685d8d8b2/Adapter.png)

  1. 클라이언트(Client)에서 타겟(Target) 인터페이스 메소드를 호출함으로써 어댑터(Adapter)에 요청합니다.
  2. 어댑터에서는 어댑티(Adaptee) 인터페이스를 사용하여 그 요청을 어댑티에 대한 (하나 이상의) 메소드 호출로 변환합니다.
  3. 클라이언트에서는 호출 결과를 받긴 하지만 중간에 어댑터가 껴 있는지는 전혀 알지 못합니다.

어댑터 패턴(Adapter Pattern)
한 클래스의 인터페이스를 클라이언트에서 사용하고자 하는 다른 인터페이스로 변환합니다. 어댑터를 이용하면 인터페이스 호환성 문제 때문에 같이 쓸 수 없는 클래스들을 연결해서 쓸 수 있습니다.

profile
재밌는 것만 하고 싶어 ʕ•ﻌ•ʔ

0개의 댓글