Adapter 패턴에 대해서 많이 들어는 봤지만!
이번 강의를 듣고 확실하게 귀에 콕 박혔다.
아주 아주 쉽게 설명해주심...
말하자면 서로 호환될 수 없는 두 개의 장치가 있다고 가정해보자.
우리집은 110V 만 가능한 데, 친구가 선물해 준 청소기는 220V 콘센트 인 것이 아닌가?
이럴 때 필요한 것이 바로 220V --> 110V 로 바꿔주는 어댑터인 것..
일상의 모든 것을 우리는 객체화 시킬 수 있다. 우리는 디벨롭허이므로..ㅎ 코드를 보자.
일단, 각각 110V, 220V 규격대로 interface를 만든다.
110V 를 상속받은 제품은 110V로 개발이 될 것이고 220V를 상속받은 제품은 220V로 개발이 될 것이다.
public interface Electronic110V {
void powerOn();
}
public interface Electronic220V {
void connect();
}
기존에 내가 산 드라이기는 당연히! 우리집이 110V만 가능하기 때문에 110V 짜리로 샀다.
자, 드라이기 클래스를 생성하자.
public class HairDryer implements Electronic110V{
@Override
public void powerOn() {
System.out.println("헤어드라이기 110V on");
}
}
친구가 선물한 220V 청소기도 클래스로 구현해보자.
public class Cleaner implements Electronic220V{
@Override
public void connect() {
System.out.println("청소기 220V on");
}
}
자, 이제 우리집 콘센트를 구현해보자.
우리집은 110V만 꽂을수 있으니 110V 콘센트 준비
public class Main {
public static void main(String[] args) {
}
//콘센트
public static void connect(Electronic110V electronic110V){
electronic110V.powerOn();
}
}
public class Main {
public static void main(String[] args) {
//내가 산 110V 드라이기 연결~ 잘된다.
HairDryer hairDryer = new HairDryer();
connect(hairDryer);
//친구가 사준 220V 드라이기 연결~ 되겠냐~
Cleaner cleaner = new Cleaner();
connect(cleaner); // 이렇게 바로 연결하려고 하면 에러난다.
//그때 필요한 것이 바로 어댑터,,!!
//그럼 어댑터 클래스를 구현해보자.
}
//콘센트
public static void connect(Electronic110V electronic110V){
electronic110V.powerOn();
}
}
110V와 220V를 연결해 줄 어댑터 클래스를 생성한다~
겉으로는 110V 처럼 보이지만(implements) 내부적으로는 220V로 연결되도록!!
public class SocketAdapter implements Electronic110V{
private Electronic220V electronic220V;
public SocketAdapter(Electronic220V electronic220V){
this.electronic220V = electronic220V;
}
@Override
public void powerOn() {
electronic220V.connect();
}
}
그럼 다시 위의 코드에서 Adapter를 이용해서 연결해보자.
public class Main {
public static void main(String[] args) {
//내가 산 110V 드라이기 연결~ 잘된다.
HairDryer hairDryer = new HairDryer();
connect(hairDryer);
//친구가 사준 220V 청소기 연결~ 되겠냐~
Cleaner cleaner = new Cleaner();
// connect(cleaner); // 이렇게 바로 연결하려고 하면 에러난다.
//위에서 구현한 110V adapter에 220V 청소기를 넣어서 해당 어댑터를 콘센트에 연결한다!!
Electronic110V adapter = new SocketAdapter(cleaner);
connect(adapter);
}
//콘센트
public static void connect(Electronic110V electronic110V){
electronic110V.powerOn();
}
이렇게 한 후 main 을 실행하면, 호환되지 않는 두 개의 객체가 어댑터를 통해 하나의 콘센트를 이용할 수 있게
됬다!
뚜뚱
헤어드라이기 110V on
청소기 220V on
각각의 기능을 변경하지 않고도 중간에 어댑터를 줌으로써 호환될 수 있도록 하는 것을 어댑터 패턴이라고 한다.
메모..
'Backend > Java' 카테고리의 다른 글
데코레이터 패턴(Decorator Pattern) 예제 코드로 이해하기 (0) | 2022.04.03 |
---|---|
프록시 패턴(Proxy pattern) 예제 코드로 이해하기 (0) | 2022.04.03 |
싱글톤 패턴(Singleton Pattern) 예제 코드로 이해하기 (0) | 2022.03.08 |
[이펙티브자바] try-with-resources를 사용하자. (0) | 2021.07.20 |
[이펙티브자바] finalizer와 cleaner 사용을 피하자. (0) | 2021.07.20 |