사전 기반 지식
- 객체지향 프로그래밍(OOP): 클래스와 객체의 개념, 상속과 인터페이스에 대한 기본적인 이해.
- 다형성: 상위 클래스나 인터페이스를 통해 다양한 하위 클래스를 처리하는 능력.
- 호환성 문제: 서로 다른 인터페이스를 가진 클래스 간의 호환성 문제 해결을 위해 어댑터 패턴을 사용하는 상황을 이해해야 한다.
어댑터 패턴 이란(Adapter Pattern)?
어댑터 패턴은 호환되지 않는 인터페이스를 가진 클래스들을 함께 동작할 수 있도록 변환해주는 디자인 패턴입니다. 즉, 기존 클래스의 인터페이스가 요구사항과 맞지 않을 때, 새로운 인터페이스를 기존 클래스에 맞추어 주는 역할을 합니다. 이를 통해 호환성 문제를 해결하고, 기존 코드를 수정하지 않고도 새로운 코드와 결합할 수 있습니다.
시나리오 코드 1
package adapter;
public class MyHouse {
// 정적 메서드 (기능 )
// 집에 220v 전기 콘센트를 연결 하는 메서드
public static void homeConnect(IElectronic220v electronic220v) {
// 청소기, 드라이어기, 냉장고, 티비
electronic220v.connect();
}
public static void main(String[] args) {
// 집 콘센트에 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();
}
/**
* AirConditioner
*/
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");
}
}
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 스펙에 연결 합니다");
}
}
활용 사례
어댑터 패턴은 주로 호환되지 않는 인터페이스를 가진 객체들을 함께 사용할 때 유용합니다. 특히, 기존 코드를 수정하지 않고 새로운 코드와 통합할 때 매우 활용도가 높습니다.
- 레거시 시스템과의 통합: 기존 시스템(레거시 코드)과 새로운 시스템이 상호작용해야 할 때, 어댑터 패턴을 사용하여 상호 호환되도록 합니다.
- 예: 오래된 결제 시스템과 새로운 결제 API를 통합할 때, 어댑터를 통해 두 시스템을 연결합니다.
- 외부 라이브러리 통합: 서로 다른 API나 외부 라이브러리를 사용하는 경우, 어댑터 패턴을 사용하여 해당 API를 내부 시스템에 맞게 변환합니다.
- 예: 새로운 외부 서비스 API가 기존 시스템의 구조와 다를 때, 어댑터를 사용하여 서로 맞춰줍니다.
- 데이터 변환: 서로 다른 데이터 구조를 가진 객체 간에 데이터 변환을 할 때도 어댑터 패턴을 사용할 수 있습니다.
- 예: JSON 데이터를 XML 형식으로 변환하거나 그 반대의 경우.
핵심 요약
어댑터 패턴은 서로 다른 인터페이스를 가진 객체들이 함께 동작할 수 있도록 변환해주는 패턴입니다.
'Spring boot > 개념 공부' 카테고리의 다른 글
PUT 방식에 이해 및 실 (0) | 2024.09.27 |
---|---|
전략 패턴 (1) | 2024.09.27 |
팩토리 패턴 (0) | 2024.09.27 |
빌더 패턴이란? (0) | 2024.09.27 |
싱글 톤 패턴 (2) | 2024.09.27 |