반응형
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 장치를 연결하여 사용
}
}
코드 설명
- Power110V: 클라이언트가 사용하려는 인터페이스입니다.
- Power220V: 기존의 220V 전원을 제공하는 클래스입니다.
- PowerAdapter: 220V 전원을 110V 전원처럼 사용할 수 있도록 변환해주는 어댑터 클래스입니다.
- AdapterPatternDemo: 클라이언트 코드로, 어댑터를 사용하여 220V 전원을 110V 전원으로 변환하여 사용합니다.
이렇게 어댑터 패턴을 사용하면 기존의 코드(220V 전원)를 변경하지 않고도 클라이언트가 원하는 방식(110V 전원)으로 사용할 수 있게 됩니다.
반응형
'언어 > Java' 카테고리의 다른 글
[ Java ] Prototype Pattern - 프로토타입 패턴 알아보기 (0) | 2024.10.03 |
---|---|
[ Java ] coding pattern - 자바 대표 코딩 패턴 알아보기 (1) | 2024.10.03 |
[ Java ] Factory Pattern 팩토리 패턴이란? (0) | 2024.10.02 |
[ Java ] 자바 버전별 특징 살펴보기 (0) | 2024.08.29 |
[ Java ] JIT 컴파일러 알아보기 (0) | 2024.08.28 |