728x90
반응형
정의:
어댑터 패턴은 호환되지 않는 인터페이스를 가진 두 클래스를 함께 동작할 수 있도록 하는 디자인 패턴입니다. 쉽게 말해, 기존의 클래스를 수정하지 않고 새로운 인터페이스에 맞게 변환해주는 역할을 하는 패턴입니다.
장점:
- 재사용성 증가: 기존 클래스를 변경하지 않고 새로운 클래스에 적응시킬 수 있으므로 기존 코드를 재사용할 수 있습니다.
- 유연성 향상: 호환되지 않는 인터페이스를 갖는 클래스를 함께 사용할 수 있어서 시스템의 유연성을 향상시킵니다.
- 연동성 증가: 기존의 클래스를 새로운 클래스와 연동할 수 있게 해주어 기존 시스템을 새로운 기능과 연동시킬 수 있습니다.
단점:
- 성능 저하 가능성: 어댑터가 추가되면 성능 저하가 발생할 수 있습니다.
- 복잡성 증가: 어댑터 패턴이 과도하게 사용되면 코드의 복잡성이 증가할 수 있습니다.
언제 사용하는지:
- 기존 코드의 재사용: 이미 개발된 기존 클래스를 활용하고자 할 때 사용합니다.
- 호환되지 않는 인터페이스 통합: 서로 다른 인터페이스를 가진 클래스들을 함께 사용해야 할 때 사용합니다.
- 새로운 기능 추가: 새로운 인터페이스를 구현한 클래스를 기존 시스템에 통합시킬 때 사용합니다.
예시 코드
// Target: 클라이언트가 기대하는 인터페이스
interface Target {
void request();
}
// Adaptee: 실제로 사용되는 클래스 (호환되지 않는 인터페이스를 가짐)
class Adaptee {
void specificRequest() {
System.out.println("호환되지 않는 메서드 호출");
}
}
// Adapter: Target 인터페이스를 구현하면서 Adaptee를 포함시켜 호환성을 제공
class Adapter implements Target {
private Adaptee adaptee;
public Adapter(Adaptee adaptee) {
this.adaptee = adaptee;
}
@Override
public void request() {
adaptee.specificRequest();
}
}
// Client: 어댑터 패턴을 사용하는 클라이언트 코드
public class AdapterExample {
public static void main(String[] args) {
// 호환되지 않는 클래스를 어댑터를 통해 사용
Adaptee adaptee = new Adaptee();
Target adapter = new Adapter(adaptee);
// 클라이언트는 Target 인터페이스를 통해 request 메서드를 호출
adapter.request(); // 출력: 호환되지 않는 메서드 호출
}
}
이 예제에서는 Adaptee 클래스의 specificRequest 메서드를 호출하는 클래스를 어댑터 패턴을 사용하여 Target 인터페이스를 구현한 Adapter 클래스로 변환합니다. 클라이언트 코드에서는 어댑터를 통해 호환되지 않는 메서드를 호출할 수 있게 됩니다.
728x90
반응형
'개발 > 자바' 카테고리의 다른 글
[java] 컴포지트(Composite) 패턴 (0) | 2024.01.12 |
---|---|
[java] 데코레이터(Decorator) 패턴 (0) | 2024.01.11 |
[java] 추상 팩토리(Abstract Factory) 패턴 (0) | 2024.01.10 |
[자바] 팩토리 메서드(Factory Method) 패턴 (1) | 2024.01.10 |
[java] 싱글턴(Singleton) 패턴 설명 및 코드 (0) | 2024.01.09 |