<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일차 세번째 강의 완료~
패스트캠퍼스 [직장인 실무교육]
프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.
fastcampus.co.kr
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
'개발새발 > Spring' 카테고리의 다른 글
220131_스프링입문_디자인패턴_데코레이터패턴_패스트캠퍼스 챌린지 08일차 (0) | 2022.01.31 |
---|---|
220130_스프링입문_디자인패턴_프록시패턴_패스트캠퍼스 챌린지 07일차 (0) | 2022.01.30 |
220129_스프링입문_디자인패턴_싱글톤패턴_패스트캠퍼스 챌린지 06일차 (0) | 2022.01.29 |
220129_스프링입문_디자인패턴_디자인패턴이란_패스트캠퍼스 챌린지 06일차 (0) | 2022.01.29 |
220128_스프링입문_객체지향_POJO JAVA_패스트캠퍼스 챌린지 05일차 (0) | 2022.01.28 |