개발새발/Spring

220129_스프링입문_디자인패턴_어댑터패턴_패스트캠퍼스 챌린지 06일차

막동이아빠 2022. 1. 29. 23:26

<2022년 01월 29일 _ 패스트캠퍼스 챌린지 06일차>

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

 

1. Adapter pattern

 : 변압기, 변환기 등을 예로 들 수 있음

 : 호환성이 없는 기존 클래스의 인터페이스를 변환하여 재사용 할 수 있도록 함

 : SOLID중에서 개방폐쇄 원칙(OCP)을 따름

 

2. 실습

 (1) design 프로젝트에서 src > com.company.design 우측 클릭 후 new > Package

   --> adapter 패키지 추가

 (2) adapter 패키지에 마우스 우측 클릭 new > Interface 추가

  --> Electronic110V 추가

 --> 동일하게 Electronic220V 도 추가한다

인터페이스 내부 코드는 다음과 같이 작성한다

package com.company.design.adapter;

public interface Electronic110V {
    void powerOn();
}
package com.company.design.adapter;

public interface Electronic220V {
    void powerOn();
}

 (3) 제품 추가

   110v 규격의 HairDryer Java Class 추가

package com.company.design.adapter;

public class HairDryer implements Electronic110V{
    @Override
    public void powerOn(){
        System.out.println("헤어 드라이기 110v on");
    }
}

   220v 규격의 AirConditioner Java Class 추가

package com.company.design.adapter;

public class AirConditioner implements Electronic220V{
    @Override
    public void powerOn() {
        System.out.println("에어컨 220v on");
    }
}

   220v 규격의 Cleaner Java Class 추가

package com.company.design.adapter;

public class Cleaner implements Electronic220V{
    @Override
    public void powerOn() {
        System.out.println("청소기 220v on");
    }
}

(4) Main문 작성

package com.company.design;

import com.company.design.adapter.Electronic110V;
import com.company.design.adapter.HairDryer;

public class Main {

    public static void main(String[] args) {
        HairDryer hairDryer = new HairDryer();
        connect(hairDryer);
    }

    // 콘센트
    public static void connect(Electronic110V electronic110V){
        electronic110V.powerOn();
    }
}

110V 헤어드라이기가 동작함을 확인

 

추가 코드를 작성해본다

package com.company.design;

import com.company.design.adapter.Cleaner;
import com.company.design.adapter.Electronic110V;
import com.company.design.adapter.HairDryer;

public class Main {

    public static void main(String[] args) {

        HairDryer hairDryer = new HairDryer();
        connect(hairDryer);

        //청소기를 사왔습니다
        Cleaner cleaner = new Cleaner();
        connect(cleaner); //110v만 받을 수 있으므로 오류 발생
    }

    // 콘센트
    public static void connect(Electronic110V electronic110V){
        electronic110V.powerOn();
    }
}

: 110v만 connect가 가능하므로 오류가 발생한다. 그렇다면 이제 Adapter를 작성해보자!

 

(5) 어댑터 Apdater 추가

 : SocketAdapter 라는 이름으로 Java Class를 추가한다

package com.company.design.adapter;

//220v가 들어와서 110v로 내보내줘야 하기 때문에 자신의 형태는 110v여야 한다
public class SocketAdapter implements Electronic110V{

    //연결시켜줘야 할 220v도 가지고 있어야 함
    private Electronic220V electronic220V;

    //default 생성자에서 220v에 해당하는 제품을 할당 받을 것이다.
    public SocketAdapter(Electronic220V electronic220V){
        this.electronic220V = electronic220V;
    }

    //powerOn에서 220v제품의 connect를 호출해준다
    @Override
    public void powerOn() {
        electronic220V.powerOn();
    }
}

(6) Main문 추가 작성

package com.company.design;

import com.company.design.adapter.*;
import com.company.design.singleton.Aclazz;
import com.company.design.singleton.Bclazz;
import com.company.design.singleton.SocketClient;

public class Main {

    public static void main(String[] args) {

        HairDryer hairDryer = new HairDryer();
        connect(hairDryer);

        //청소기를 사왔습니다
        Cleaner cleaner = new Cleaner();
        Electronic110V adapter = new SocketAdapter(cleaner);
        connect(adapter);

        //에어컨을 사왔습니다.
        AirConditioner airConditioner = new AirConditioner();
        Electronic110V airAdapter = new SocketAdapter(airConditioner);
        connect(airAdapter);

        //청소기를 사왔습니다
        //Cleaner cleaner = new Cleaner();
        //connect(cleaner); //110v만 받을 수 있으므로 오류 발생
    }

    // 콘센트
    public static void connect(Electronic110V electronic110V){
        electronic110V.powerOn();
    }
}

결과:

서로 비슷하지만 인터페이스가 맞지 않을때 가운데에서 변환해주는 Adpater 를 사용해보자~

 

6일차 세번째 강의 완료~

필기 & 내 화면 스크린샷 저장

 

 

https://bit.ly/37BpXiC

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.