어댑터 패턴
: 어댑터를 이용하면 인터페이스 호환성 문제 때문에 같이 쓸 수 없는 클래스들을 연결해서 쓸 수 있다.
어댑터 패턴 예제
MyHouse 클래스
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | package ch01; public class MyHouse { // main 함수 public static void main(String[] args) { AirConditional airConditional = new AirConditional(); Cleaner cleaner = new Cleaner(); HairDryer hairDryer = new HairDryer(); WashingMachine washingMachine = new WashingMachine(); // 인터페이스와 다형성 connect(airConditional); connect(cleaner); // 철물점에서 어댑터 준비 TencoAdapter adapterHairDryer = new TencoAdapter(hairDryer); connect(adapterHairDryer); TencoAdapter adapterWashingMachine = new TencoAdapter(washingMachine); connect(adapterWashingMachine); } // end of main // MyHouse static // 전기 콘센트 public static void connect(IElectronic220v iElectronic220v) { iElectronic220v.connect(); } } // end of class | cs |
Airconditional 클래스
1 2 3 4 5 6 7 8 9 10 | package ch01; public class Airconditional implements IElectronic220v{ //전기를 연결하다. @Override public void connect() { System.out.println("에어컨 연결 220V ON"); } } | cs |
Cleaner 클래스
1 2 3 4 5 6 7 8 9 10 11 | package ch01; public class Cleaner implements IElectronic220v{ //전기를 연결하다. @Override public void connect() { System.out.println("청소기 연결 220V ON"); } } | cs |
WashingMachine 클래스
1 2 3 4 5 6 7 8 9 10 | package ch01; public class WashingMachine implements IElectronic110v{ @Override public void connect() { System.out.println("세탁기 연결 110V ON"); } } | cs |
IElectronic220v 인터페이스
1 2 3 4 5 | package ch01; public interface IElectronic220v { void connect(); } | cs |
IElectronic110v 인터페이스
1 2 3 4 5 | package ch01; public interface IElectronic110v { void connect(); } | cs |
HairDryer 클래스 (110v 연결)
1 2 3 4 5 6 7 8 9 10 | package ch01; public class HairDryer implements IElectronic110v{ @Override public void connect() { System.out.println("헤어드라이기 연결 110V ON"); } } | cs |
TencoAdapter 클래스
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | package ch01; /* * * 어댑터 패턴 설정 * 인터페이스로 선언하면 코드를 유연하게 설계 가능 * * */ //기존에 연결해야할 인터페이스를 구현하고 public class TencoAdapter implements IElectronic220v { // 변환해야 할 인터페이스를 선언해 생성자를 매개변수로 넣어서 연결하기 IElectronic110v iElectronic110v; public TencoAdapter(IElectronic110v iElectronic110v) { this.iElectronic110v = iElectronic110v; } @Override public void connect() { iElectronic110v.connect(); } } | cs |
→ Adapter로 사용할 클래스에 기존에 연결해야 할 인터페이스를 구현하고 변환해야 할 인터페이스를 멤버 변수로 선언해 생성자를 매개변수로 넣어서 연결하면 유연하게 클래스와 인터페이스를 연결하여 사용할 수 있다.
콘솔 화면
'프로그래밍 > Java' 카테고리의 다른 글
Java_옵저버 패턴 (0) | 2023.04.13 |
---|---|
Java_스트림(Stream) (0) | 2023.04.09 |
Java_템플릿 메서드 패턴, 싱글톤 패턴, 빌더 패턴 (1) | 2023.03.23 |
Java_람다식(Lambda Expression) (1) | 2023.03.22 |
Java_소켓(Socket) 통신 (0) | 2023.03.04 |