Giken Dev
반응형

어댑터 패턴?

기존의 클래스나 인터페이스를 다른 인터페이스로 변환하는 데 사용되는 구조적인 패턴입니다. 

 

다음과 같은 상황에서 유용합니다.

  1. 두 개의 인터페이스가 호환되지 않을 때
  2. 기존 클래스를 변경하지 않고 새로운 클래스나 인터페이스와 통합할 때 

 

 

어댑터 패턴은 다음과 같은 주요 구성 요소로 구성됩니다

  • Target(대상) 인터페이스: 클라이언트가 사용하려는 인터페이스입니다. 클라이언트 코드는 이 인터페이스를 통해 객체에 접근합니다.
  • Adaptee(적응 대상) 클래스 또는 인터페이스: 기존에 사용하려는 클래스 또는 인터페이스로, 클라이언트가 직접 사용하기 어려운 경우가 있습니다.
  • Adapter(어댑터) 클래스: Target 인터페이스를 구현하고, Adaptee를 감싸서 Target 인터페이스를 따르도록 변환합니다. 클라이언트는 어댑터를 사용하여 Adaptee에 접근합니다.

 

 

 

 

어댑터 패턴이 적용될 수 있는 상황

  • 기존 코드를 수정하지 않고 새로운 인터페이스를 사용해야 할 때
  • 여러 개의 클래스나 라이브러리를 통합하여 사용해야 할 때
  • 호환되지 않는 인터페이스를 통합하려고 할 때.

 

 

// 기존 클래스 (LegacyLibrary)
class LegacyLibrary {
    public void legacyMethod() {
        System.out.println("Legacy method is called.");
    }
}

// 새로운 인터페이스 (NewInterface)
interface NewInterface {
    void newMethod();
}

// 어댑터 클래스
class Adapter implements NewInterface {
    private LegacyLibrary legacy;

    public Adapter(LegacyLibrary legacy) {
        this.legacy = legacy;
    }

    @Override
    public void newMethod() {
        // 어댑터 클래스 내에서 기존 메서드를 호출
        legacy.legacyMethod();
    }
}

// 클라이언트 코드
public class Main {
    public static void main(String[] args) {
        // 기존 라이브러리를 사용하고자 할 때
        LegacyLibrary legacy = new LegacyLibrary();
        legacy.legacyMethod();

        // 어댑터를 통해 새로운 인터페이스를 사용
        NewInterface adapter = new Adapter(legacy);
        adapter.newMethod();
    }
}

 

 

 

 

어댑터 패턴이 적용되면서 생긴 장점

  • 기존 코드의 재사용: 어댑터 패턴을 사용하면 기존 클래스나 인터페이스를 수정하지 않고 새로운 인터페이스나 클래스와 통합할 수 있습니다. 
  • 호환성 확보: 호환되지 않는 두 개의 인터페이스 또는 클래스를 연결하여 상호 작용할 수 있도록 만들어줍니다. 이는 기존 시스템과 새로운 컴포넌트 사이의 호환성 문제를 해결하는 데 도움이 됩니다.
  • 유연성 향상: 어댑터 패턴을 통해 새로운 기능을 추가하거나 변경할 때, 기존 코드를 수정하지 않고도 기능 확장이 가능합니다.

 

 

 

어댑터 패턴이 보호하고자 하는 것

  • 기존 코드 또는 라이브러리의 안정성 유지
  • 기존 코드 변경 최소화
  • 코드 유지 관리 : 기존 코드와 새로운 코드가 각각 독립적으로 관리되며, 변경 시 영향 범위를 제한할 수 있습니다.

 

 

반응형
profile

Giken Dev

@기켄

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!