반응형
어댑터 패턴?
기존의 클래스나 인터페이스를 다른 인터페이스로 변환하는 데 사용되는 구조적인 패턴입니다.
다음과 같은 상황에서 유용합니다.
- 두 개의 인터페이스가 호환되지 않을 때
- 기존 클래스를 변경하지 않고 새로운 클래스나 인터페이스와 통합할 때
어댑터 패턴은 다음과 같은 주요 구성 요소로 구성됩니다
- 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();
}
}
어댑터 패턴이 적용되면서 생긴 장점
- 기존 코드의 재사용: 어댑터 패턴을 사용하면 기존 클래스나 인터페이스를 수정하지 않고 새로운 인터페이스나 클래스와 통합할 수 있습니다.
- 호환성 확보: 호환되지 않는 두 개의 인터페이스 또는 클래스를 연결하여 상호 작용할 수 있도록 만들어줍니다. 이는 기존 시스템과 새로운 컴포넌트 사이의 호환성 문제를 해결하는 데 도움이 됩니다.
- 유연성 향상: 어댑터 패턴을 통해 새로운 기능을 추가하거나 변경할 때, 기존 코드를 수정하지 않고도 기능 확장이 가능합니다.
어댑터 패턴이 보호하고자 하는 것
- 기존 코드 또는 라이브러리의 안정성 유지
- 기존 코드 변경 최소화
- 코드 유지 관리 : 기존 코드와 새로운 코드가 각각 독립적으로 관리되며, 변경 시 영향 범위를 제한할 수 있습니다.
반응형
'백엔드 데브코스' 카테고리의 다른 글
[Java] 퍼사드 패턴 (0) | 2023.10.09 |
---|---|
[Java] 디자인패턴과 안티 패턴 (0) | 2023.10.08 |
[Java] 도서관리 프로그램을 만들면서 배운것들 - Enum, Builder 디자인패턴 (0) | 2023.10.06 |
[Java] SOLID란? (2) - 객체 지향 프로그래밍의 5가지 기본 원칙 (0) | 2023.09.29 |
[Java] SOLID란? (1) - 객체 지향 프로그래밍의 5가지 기본 원칙 (0) | 2023.09.27 |