728x90
반응형
💡 Adpater pattern
- 실생활에서는 110v 를 220v로 변경해주거나, 그 반대로 해주는 돼지코라고 불리는 변환기를 예로 들면 이해하기 쉽다.
- 호환성이 없는 기존 클래스의 인터페이스를 변환하여 재사용 할 수 있도록 한다.
- SOLID 중에서 개방폐쇄 원칙 (OCP)를 따른다.
- 개방 폐쇄의 원칙(OCP)이란 기존의 코드를 변경하지 않으면서, 기능을 추가할 수 있도록 설계가 되어야 한다는 원칙을 말한다.
🧑🏻💻 220 볼트 짜리를 110 볼트로 변환하는 변환기 Adapter를 만들어보자.
- 110v 인터페이스
public interface Electronic110V {
void powerOn();
}
- 220v 인터페이스
public interface Electronic220V {
void connect();
}
- 220v 제품
- 에어컨, 청소기 클래스
- AirConditioner
public class AirConditioner implements Electronic220V{
@Override
public void connect() {
System.out.println("에어컨 220v on");
}
}
- Cleanner
public class Cleanner implements Electronic220V{
@Override
public void connect() {
System.out.println("청소기 220v on");
}
}
- 110v 제품
- 드라이기
- HairDryer
public class HairDryer implements Electronic110V{
@Override
public void powerOn() {
System.out.println("헤어 드라이기 110v on");
}
}
- Main (일본 여행가서 110v 밖에 못 쓸때)
public class Main {
public static void main(String[] args) {
//110v 콘센트에 헤어드라이기(110) 연결
HairDryer hairDryer = new HairDryer();
connect(hairDryer);
//110v 콘센트에 청소기(220) 연결
Cleanner cleanner = new Cleanner();
//connect(cleanner); //110v 만 받을 수 있음.
//110 -> 220 변환해주는 어댑터가 필요함.
Electronic110V adpater = new SocketAdapter(cleanner);
connect(adpater);
AirConditioner airConditioner = new AirConditioner();
//connect(airConditioner); // 110v라 안된다.
Electronic110V airAdpater = new SocketAdapter(airConditioner);
connect(airAdpater);
}
//콘센트 110v 용
public static void connect(Electronic110V electronic110V){
//110V짜리를 구현하는 제품 객체를 받아 전원을 연결한다.
electronic110V.powerOn();
}
}
- 변환기 어댑터 클래스
- SocketAdapter
public class SocketAdapter implements Electronic110V{
//110V 짜리 인터페이스를 구현하는 클래스
private Electronic220V electronic220V; //220V 짜리 인터페이스 인스턴스 생성
public SocketAdapter(Electronic220V electronic220V){
this.electronic220V = electronic220V;
//생성자를 통해 220V 용 제품을 받아인다.
}
@Override
public void powerOn() {
//110V 전원메소드에서, 220V 짜리 연결을 한다.
electronic220V.connect();
}
}
- 이와 같이 어댑터 클래스를 사용하여, 호환성이 없는 클래스도 호환하여 재사용성을 높여준다.
728x90
반응형
'Java' 카테고리의 다른 글
[Java] Proxy Pattern (0) | 2023.01.11 |
---|---|
[Java] 싱글톤(Singleton) 패턴 (0) | 2023.01.10 |
[Java] 큐(Queue) 구현 (2) | 2023.01.08 |
[Java] 스택(Stack) 구현 (0) | 2023.01.08 |
[Java] 연결 리스트(LinkedList) (0) | 2023.01.03 |