사전 기반 지식
- 객체지향 프로그래밍(OOP): 클래스와 객체의 개념, 상속과 인터페이스에 대한 기본적인 이해.
- 다형성: 상위 클래스나 인터페이스를 통해 다양한 하위 클래스를 처리하는 능력.
- 호환성 문제: 서로 다른 인터페이스를 가진 클래스 간의 호환성 문제 해결을 위해 어댑터 패턴을 사용하는 상황을 이해해야 한다.
어댑터 패턴 이란(Adapter Pattern)?
어댑터 패턴은 호환되지 않는 인터페이스를 가진 클래스들을 함께 동작할 수 있도록 변환해주는 디자인 패턴이다. 즉, 기존 클래스의 인터페이스가 요구사항과 맞지 않을 때, 새로운 인터페이스를 기존 클래스에 맞추어 주는 역할을 한다. 이를 통해 호환성 문제를 해결하고, 기존 코드를 수정하지 않고도 새로운 코드와 결합할 수 있다.
package adapter;
// 핵심 개념
// 어댑터 클래스는 두 객체 같의 중재자로서, 서로 다른 인터페이스를 가진 객체들이
// 함께 동작할 수 있게 한다.
// 어댑터 클래스: 110v 기기를 220v 전압에서 사용할 수 있도록 변환하는 역할을 시킨디ㅏ.
// 2. 변환하고자 하는 스펙을 구현해야 한다.
public class ElectronicAdapter implements IElectronic220v {
// 1. 변환시킬 스펙을 포함 관계로 가지고 있어야 한다.
private IElectronic110v electronic110v;
// 3. 생성자를 통해서 110v 가전기기를 주입받음. 이를 통해 110v와 220v 연결하게 처리한다.
public ElectronicAdapter(IElectronic110v electronic110v){
this.electronic110v = electronic110v;
}
@Override
public void connect() {
// 어댑터는 220v 인터페이스로 호출되니 메스드를 110v 기기의 connect()로 변환하여 실행한다.
electronic110v.connect();
System.out.println("어댑터를 통해 110v 가전기기를 220v ");
}
}
package adapter;
public class MyHouse {
// 정적 메서드 (기능)
// 집에 220v 전기 콘센트를 연결하는 메서드
public static void homeConnect(IElectronic220v electronic220v){
// 청소기, 드라이어기, 냉장고, 티비
electronic220v.connect();
}
public static void main(String[] args) {
// 1.
// 집 콘센트에 220v 스펙을 구현한 에어컨을 연결해 보자.
AirConditioner airConditioner = new AirConditioner();
homeConnect(airConditioner);
HairDryer dryer = new HairDryer();
// homeConnect(dryer); // 220v 에는 연결 불가
// 어댑터 클래스를 사왔음
ElectronicAdapter 헤어드라이기연결어댑터 = new ElectronicAdapter(dryer);
homeConnect(헤어드라이기연결어댑터);
}// end of main
}// end of MyHouse
// 스펙: 220v 가전기기 인터페이스
interface IElectronic220v{
void connect();
}
interface IElectronic110v{
void connect();
}
class AirConditioner implements IElectronic220v{
@Override
public void connect() {
System.out.println("에어컨 연결 220v On");
}
}
class HairDryer implements IElectronic110v{
@Override
public void connect() {
System.out.println("헤어드라이기 연결 110v On");
}
}
활용 사례
어댑터 패턴은 주로 호환되지 않는 인터페이스를 가진 객체들을 함께 사용할 때 유용하다. 특히, 기존 코드를 수정하지 않고 새로운 코드와 통합할 때 매우 활용도가 높다.
- 레거시 시스템과의 통합: 기존 시스템(레거시 코드)과 새로운 시스템이 상호작용해야 할 때, 어댑터 패턴을 사용하여 상호 호환되도록 한다.
- 예: 오래된 결제 시스템과 새로운 결제 API를 통합할 때, 어댑터를 통해 두 시스템을 연결한다.
- 외부 라이브러리 통합: 서로 다른 API나 외부 라이브러리를 사용하는 경우, 어댑터 패턴을 사용하여 해당 API를 내부 시스템에 맞게 변환한다.
- 예: 새로운 외부 서비스 API가 기존 시스템의 구조와 다를 때, 어댑터를 사용하여 서로 맞춰준다.
- 데이터 변환: 서로 다른 데이터 구조를 가진 객체 간에 데이터 변환을 할 때도 어댑터 패턴을 사용할 수 있다.
- 예: JSON 데이터를 XML 형식으로 변환하거나 그 반대의 경우.
핵심 요약
어댑터 패턴은 서로 다른 인터페이스를 가진 객체들이 함께 동작할 수 있도록 변환해주는 패턴이다.
728x90
'Java > 디자인 패턴의 활용' 카테고리의 다른 글
팩토리 패턴 (2) | 2024.09.26 |
---|---|
빌더 패턴이란? (0) | 2024.09.26 |
싱글 톤 패턴 (1) | 2024.09.25 |
콜백 메서드 만들어보기 (0) | 2024.09.25 |
디자인 패턴의 활용 (2) | 2024.09.25 |