[스프링] 스프링 입문_디자인 패턴_02_어댑터(Adapter)

2022. 7. 28. 23:54·A - 종료 및 관심 밖/spring

어댑터 패턴 (Adapter pattern)

- 호환성이 없는 기존 클래스의 인터페이스를 변환하여 재사용할 수 있도록 함
- 개방폐쇄원칙을 따른다

1. 110v, 220v 제품에 적용할 인터페이스 생성

// Electronic110V.java
public interface Electronic110V {
    public void powerOn();
}
// Electronic220V.java
public interface Electronic220V {
    public void connect();
}

2. 전압이 다른 2개의 제품 생성

// HairDryer.java
public class HairDryer implements Electronic110V {
    @Override
    public void powerOn() {
        System.out.println("110v 헤어드라이기 ON");
    }
}
// AirConditioner.java
public class AirConditioner implements Electronic220V{
    @Override
    public void connect() {
        System.out.println("220v 에어컨 ON");
    }
}

3. Main.java의 connect 메소드는 110v를 매개변수로 받아 powerOn 메소드를 실행하기 때문에 에어컨은 사용이 불가하다

// Main.java
public static void main(String[] args){
	
    HairDryer hairDryer = new HairDryer();
    // 헤어드라이어는 Electronic110V를 상속받기 때문에 사용가능
    connect(hairDryer);
	
    AirConditioner airConditioner = new AirConditioner();
    // 에어컨은 헤어드라이어와 달리 Electronic220V를 상속 받기 때문에 connect를 사용할 수 없다
    // connect(airConditioner)
}

// 콘센트 역할. 매개변수로 Electronic110V를 받는다
public static void connect(Electronic110V electronic110V){
    electronic110V.powerOn();
}

4. 220v 제품을 사용할 수 있도록 어댑터를 생성한다

// SocketAdpater.java
// 110V -> 220V로 전압을 변환해주는 돼지코 역할을 한다
// 110V를 상속받아 220V로 변환해줘야하기 때문에 자신은 110V를 입력받아야 한다
public class SocketAdapter implements Electronic110V {

	// 연결시켜줘야하기 때문에 자신이 가지고 있어야 함
    private Electronic220V electronic220V;
	
    // 기본생성자에서 매개변수에 Electronic220V 할당
    public SocketAdapter(Electronic220V electronic220V){
        this.electronic220V = electronic220V;
    }

    @Override
    public void powerOn() {
    	// Electronic220V의 connect 메소드를 호출에서 Electronic110V의 powerOn을 했을 때 동작하도록 한다
        electronic220V.connect();
    }
}

5. 어댑터를 사용하여 220v 제품을 연결하면 110v의 메소드를 실행할 수 있다

// Main.java
public static void main(String[] args){
	
    ...
	
    // 110v 어댑터를 생성하고 SocketAdpater의 매개변수로 에어컨을 넣어준다
    Electronic110V adapter = new SocketAdapter(airConditioner);
    // 연결 시 에어컨이 아닌 어댑터 값을 넣어준다
    connect(adpater);
}

// 콘센트 역할. 매개변수로 Electronic110V를 받는다
public static void connect(Electronic110V electronic110V){
    electronic110V.powerOn();
}

 

저작자표시 비영리 변경금지 (새창열림)
'A - 종료 및 관심 밖/spring' 카테고리의 다른 글
  • [스프링] 웹 개발 개론
  • [스프링] 스프링 입문_디자인 패턴_03_프록시(proxy)
  • [스프링] 스프링 입문_디자인 패턴_01_싱글톤(singleton)
  • [스프링] 스프링 입문_객체 지향
dev-moons
dev-moons
주니어 개발자의 개발지식 학습 내용부터 java, python 등 실무 중심으로 필요한 내용들을 정리하는 블로그입니다
  • dev-moons
    dev-moons의 개발 블로그 | 주니어 개발자의 프론트부터 백엔드까지
    dev-moons
  • 전체
    오늘
    어제
    • 분류 전체보기 (29) N
      • P - 기한이 있는 목표 (4) N
        • 개발지식 (4) N
      • A - 장기적인 목표 (0)
      • R - 일반적인 관심사 (1)
      • A - 종료 및 관심 밖 (25)
        • 독서 (1)
        • spring (11)
        • javascript (2)
        • sql (6)
        • db (1)
        • 자료구조론 (2)
        • springboot 게시판 만들기 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    스프링
    자료구조론
    m1mac
    java
    mysql
    SQL
    Spring
    SQL고득점KIT
    스프링입문
    디자인패턴
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
dev-moons
[스프링] 스프링 입문_디자인 패턴_02_어댑터(Adapter)
상단으로

티스토리툴바