본문 바로가기

언어/Java

[ Java ] Adapter Pattern 어댑터 패턴이란?

반응형

1. 어댑터 패턴(Adapter Pattern)

어댑터 패턴은 클래스의 인터페이스를 사용자가 기대하는 다른 인터페이스로 변환합니다. 이 패턴은 호환되지 않는 인터페이스를 가진 클래스들이 함께 동작할 수 있도록 도와줍니다. 흔히 사용하는 경우는 새로운 코드와 기존 코드의 호환성을 맞출 때입니다.

이 패턴은 객체지향 설계 원칙 중 "인터페이스에 맞춰 프로그래밍하고, 구현에 맞춰 프로그래밍하지 않는다"는 원칙을 따릅니다. 어댑터 패턴은 주로 클라이언트 코드가 기존의 코드와 상호 작용할 때, 중간에 변환기를 제공하여 호환성을 맞춥니다.

2. 어댑터 패턴의 구성 요소

  • Target (목표 인터페이스): 클라이언트가 사용하고자 하는 인터페이스입니다.
  • Adapter (어댑터): Target 인터페이스를 구현하고, Adaptee의 인터페이스를 변환하여 클라이언트가 사용할 수 있도록 합니다.
  • Adaptee (적응 대상): 기존에 있는 클래스 또는 인터페이스로, 클라이언트가 직접 사용할 수 없는 형태입니다.
  • Client (클라이언트): Target 인터페이스를 사용하여 작업을 수행하는 주체입니다.

3. 예제 코드: 자바 어댑터 패턴

이 예제에서는 220V 전원을 사용하는 기존 Adaptee 클래스를 110V 전원을 사용하는 Target 인터페이스로 변환하는 어댑터를 구현합니다.

// Target 인터페이스: 클라이언트가 사용하려는 인터페이스
interface Power110V {
    void connect();
}

// Adaptee 클래스: 기존에 있는 220V 전원을 사용하는 클래스
class Power220V {
    public void provide220V() {
        System.out.println("220V 전원을 제공합니다.");
    }
}

// Adapter 클래스: Power110V 인터페이스를 구현하고 Power220V 인스턴스를 이용하여 변환
class PowerAdapter implements Power110V {
    private Power220V power220V;

    public PowerAdapter(Power220V power220V) {
        this.power220V = power220V;
    }

    @Override
    public void connect() {
        System.out.println("110V 전원을 사용하기 위해 어댑터를 사용합니다.");
        power220V.provide220V();
    }
}

// Client 코드
public class AdapterPatternDemo {
    public static void main(String[] args) {
        Power220V power220V = new Power220V(); // 기존 220V 전원
        Power110V adapter = new PowerAdapter(power220V); // 어댑터를 통해 110V 인터페이스 사용
        adapter.connect(); // 110V 장치를 연결하여 사용
    }
}

코드 설명

  1. Power110V: 클라이언트가 사용하려는 인터페이스입니다.
  2. Power220V: 기존의 220V 전원을 제공하는 클래스입니다.
  3. PowerAdapter: 220V 전원을 110V 전원처럼 사용할 수 있도록 변환해주는 어댑터 클래스입니다.
  4. AdapterPatternDemo: 클라이언트 코드로, 어댑터를 사용하여 220V 전원을 110V 전원으로 변환하여 사용합니다.

이렇게 어댑터 패턴을 사용하면 기존의 코드(220V 전원)를 변경하지 않고도 클라이언트가 원하는 방식(110V 전원)으로 사용할 수 있게 됩니다.

반응형