[디자인 패턴] 디자인 패턴(Design Pattern)이란
1. 디자인 패턴(Design Pattern)이란 설계에 자주 사용하는 패턴들을 정형화 하여 유형별로 정해두고 상황에 맞게 사용될 수 있는 문제들을 해결하는데에 쓰이는 서술이나 템플릿을 뜻한다. 2. 디자
hyunbenny.tistory.com
1. 어댑터 패턴(Adapter Pattern)이란
클래스의 인터페이스를 다른 인터페이스로 변환하는 패턴이다.
- 함께 동작할 수 없는 클래스들이 함께 동작할 수 있도록 해준다.
- 기존의 코드를 수정하지 않고 코드를 재활용할 수 있다는 장점이 있다.(SOLID 중 OCP를 따른다.)
2. 어떤 경우 사용하는가
- 기능적으로는 문제없이 동작하는 코드가 단지 인터페이스 차이로 인해 호환되지 않아 사용할 수 없는 경우 주로 사용한다.
3. 코드로 알아보기
- 현재 집에서 사용하고 있는 에어컨과 세탁기는 국내에서 발매된 제품을 사용하고 있다.
- 그렇다면 아래와 같이 코드로 나타내 볼 수 있겠다.
public interface Volt220 {
void powerOn();
}
// 콘센트
public class PowerSocket {
// 콘센트에 연결하면 해당 제품의 전원이 들어온다
public static void connect(Volt220 volt220) {
volt220.powerOn();
}
}
public class AirConditioner implements Volt220 {
@Override
public void powerOn() {
System.out.println("AirConditioner power on");
}
}
public class WashingMachine implements Volt220 {
@Override
public void powerOn() {
System.out.println("WashingMachine power on");
}
}
public class Main {
public static void main(String[] args) {
AirConditioner airConditioner = new AirConditioner();
PowerSocket.connect(airConditioner);
WashingMachine washingMachine = new WashingMachine();
PowerSocket.connect(washingMachine);
}
}
// AirConditioner power on
// WashingMachine power on
- 이번 생일을 맞아 나에게 주는 선물로 미국 해외 직구로 오디오를 샀는데 110v로 왔다.
public interface Volt110 {
void powerOn();
}
public class Audio implements Volt110 {
@Override
public void powerOn() {
System.out.println("Audio power on");
}
}
- 그렇다면 110v를 220v 콘센트에 사용하기 위해서는 돼지코를 변환해주는 어댑터를 사용해야 한다.
- 쉽게 생각했을 때 이런 것이 떠오른다.
- 이 어댑터를 이용하여 연결하는 것을 코드로 표현하면 아래와 같다.
public class Volt110To220SocketAdapter implements Volt220{
private Volt110 volt110;
public Volt110To220SocketAdapter(Volt110 volt110) {
this.volt110 = volt110;
}
@Override
public void powerOn() {
System.out.print("Using adapter 110v -> 220v : ");
volt110.powerOn();
}
}
- 어댑터가 110v 돼지코를 매개변수로 받아 220v로 변환하여 실행할 수 있게 해준다.
public class Main {
public static void main(String[] args) {
AirConditioner airConditioner = new AirConditioner();
PowerSocket.connect(airConditioner);
WashingMachine washingMachine = new WashingMachine();
PowerSocket.connect(washingMachine);
Audio audio = new Audio();
Volt110To220SocketAdapter adapter = new Volt110To220SocketAdapter(audio);
PowerSocket.connect(adapter);
}
}
// AirConditioner power on
// WashingMachine power on
// Using adapter 110v -> 220v : Audio power on
'디자인패턴' 카테고리의 다른 글
[디자인패턴] 구조패턴 - 프록시 패턴(Proxy Pattern) (0) | 2023.03.08 |
---|---|
[디자인패턴] 생성 패턴 - 싱글톤 패턴(Singleton Pattern) (1) | 2023.02.28 |
[디자인 패턴] 디자인 패턴(Design Pattern)이란 (0) | 2023.02.21 |