3. 어댑터 Adapter Pattern 개념 및 실습

Yeppi's 개발 일기·2022년 5월 13일
1

디자인패턴

목록 보기
3/8
post-thumbnail

1. 개념

  • 호환성이 없는 기존 클래스의 인터페이스를 변환하여 재사용 가능

  • SOLID 중 개방 폐쇄 원칙(OCP)


2. 실습

  • ex. 전기 콘센트 110v, 220v 서로 변환해주는 어댑터

인터페이스 생성

  • 110 콘센트
public interface Electronic110V {
    void powerOn();
}
  • 220 콘센트
public interface Electronic220V {
    void connect();
}

상속받아 사용할 클래스

  • 110v 의 헤어드라이기
// 110V를 가지는 헤어드라이기 제품
public class HairDryer implements Electronic110V {
    @Override
    public void powerOn() {
        System.out.println("헤어 드라이기 110v on");
    }
}
  • 220v 의 에어컨
public class AirConditioner implements Electronic220V{
    @Override
    public void connect() {
        System.out.println("에어컨 220v on");
    }
}
  • 220v의 청소기
public class Cleaner implements Electronic220V {
    @Override
    public void connect() {
        System.out.println("청소기 220v on");
    }
}

인터페이스 변환해주는 클래스 = Adapter

  • 호환성이 없는 클래스 끼리 연결

    • 110v 콘센트에 220v 제품 연결
    • 220v 콘센트에 110v 제품 연결
  • SocketAdapter

// 자기자신(110V)와 연결할 대상(220V)를 연결(Adapter)하여 변환

public class SocketAdapter implements Electronic110V{
    private Electronic220V electronic220V;

    public  SocketAdapter(Electronic220V electronic220V) {
        this.electronic220V = electronic220V;
    }
    @Override
    public void powerOn() {
        electronic220V.connect();
    }
}

출력 결과

  • 220v를 110v 로 변환해주는 인터페이스를 사용하기 때문에
    간단하게 클래스 타입을 변환시키며 재사용 할 수 있음
  • 각기 다른 클래스 타입을 연결 시켜줄 동작 기능 메서드
    • Adapter 콘센트 동작
public static void connect(Electronic110V electronic110V) {
	electronic110V.powerOn();
}
  • main
HairDryer hairDryer = new HairDryer();
connect(hairDryer); // 출력 : 헤어 들라이기 110v on

// Adapter 를 통해서, 원래 220v인 Cleaner 를 110v에 연결 가능
Cleaner cleaner = new Cleaner();
Electronic110V adapter = new SocketAdapter(cleaner);
connect(adapter); // 출력 : 청소기 220v on

// Adapter 를 통해서, 원래 220v인 AirConditioner 를 110v에 연결 가능
AirConditioner airConditioner = new AirConditioner();
Electronic110V airAdapter = new SocketAdapter(airConditioner);
connect(airAdapter); // 출력 : 에어컨 220v on
profile
imaginative and free developer. 백엔드 / UX / DATA / 기획에 관심있지만 고양이는 없는 예비 개발자👋

0개의 댓글