안녕하세요! 이번 포스팅에서는 디자인 패턴 중에서 **어댑터 패턴(Adapter Pattern)**에 대해 다뤄보려고 합니다.
어댑터 패턴은 개발 과정에서 자주 등장하는 호환성 문제를 해결하기 위해 사용되는 유용한 패턴 중 하나입니다.
특히, 서로 다른 인터페이스를 가진 객체들이 함께 동작해야 할 때 이 패턴을 통해 효율적으로 문제를 해결할 수 있습니다.
어댑터 패턴이란?
어댑터 패턴은 호환되지 않는 인터페이스를 가진 클래스들이 함께 동작할 수 있도록 중재 역할을 수행하는 디자인 패턴입니다.
기존 클래스의 인터페이스를 변경하지 않으면서도 새로운 요구사항을 수용할 수 있도록 변환기 역할을 합니다. 이를 통해 호환성 문제를 해결하고, 기존 코드를 수정하지 않고도 새로운 코드와 결합할 수 있습니다. 예를 들어, 110V 전압의 기기를 220V 전압의 콘센트에 연결하려면 어댑터가 필요하듯, 코드에서도 비슷한 상황이 발생할 때 이 패턴을 사용합니다.
어댑터 패턴의 구조
- 클라이언트(Client): 원하는 인터페이스를 통해 작업을 수행합니다.
- 타겟(Target): 클라이언트가 기대하는 인터페이스입니다.
- 어댑터(Adapter): 클라이언트가 기대하는 인터페이스를 구현하고, 실제로 동작할 수 있는 객체와 연결합니다.
- 어댑터 대상(Adaptee): 기존 인터페이스를 가진 클래스입니다. 이 클래스는 어댑터를 통해 변환되어 동작합니다.
Java로 구현하는 어댑터 패턴
1. 인터페이스 설계
110V와 220V 전압을 가진 기기들의 연결 방식을 인터페이스로 정의합니다.
interface IElectronic220v {
void connect();
}
interface IElectronic110v {
void connect();
}
2. 클래스 구현
- HairDryer: 110V 전압의 기기입니다.
- AirConditioner: 220V 전압의 기기입니다.
class HairDryer implements IElectronic110v {
@Override
public void connect() {
System.out.println("드라이기 연결");
}
}
class AirConditioner implements IElectronic220v {
@Override
public void connect() {
System.out.println("에어컨 연결 220v");
}
}
3. 어댑터 구현
ElectronicAdapter는 110V 기기를 220V 인터페이스로 변환하는 역할을 합니다.
package com.demo.adapter;
public class ElectronicAdapter implements IElectronic220v{
// 실제 기기 어댑터 내부에 전압 변경 기능이 있다
private IElectronic110v electronic110v;
// 어! 이 녀석 생성시에 강제성 110v 타입을 가진 녀석만 들어올 수 있다.
public ElectronicAdapter(IElectronic110v electronic110v) {
this.electronic110v = electronic110v;
}
@Override
public void connect() {
electronic110v.connect();
System.out.println("어댑터를 통해 110v 타입의 기기를 220v 스펙에 연결합니다.");
}
}
4. 클라이언트 코드 작성
클라이언트는 homeConnect 메서드를 사용해 220V 기기를 연결합니다. 110V 기기는 어댑터를 통해 연결됩니다.
public class MyHouse {
// 정적 메서드
// 집에 220v 전기콘센트를 연결하는 메서드
public static void homeConnect(IElectronic220v iElectronic220v) {
// 콘센트 연결하는 행위
iElectronic220v.connect();
}
// 메인 함수
public static void main(String[] args) {
HairDryer hairDryer = new HairDryer();
AirConditioner airConditioner = new AirConditioner();
ElectronicAdapter AdapterHairDryer = new ElectronicAdapter(hairDryer);
// 어댑터를 사용하여 서로 다른 인터페이스를 연결
homeConnect(adapterHairDryer); // 드라이기를 어댑터를 통해 연결
homeConnect(airConditioner); // 에어컨을 직접 연결
}
}
실행결과
드라이기 연결
어댑터를 통해 110v 타입의 기기를 220v 스펙에 연결합니다.
에어컨 연결 220v
어댑터 패턴의 장점과 단점
장점
- 호환성 제공: 기존 코드를 수정하지 않고도 새로운 코드와 함께 동작할 수 있습니다.
- 재사용성 증가: 기존 클래스와 새로운 클래스 간의 연결을 가능하게 만들어 재사용성을 높입니다.
- 유연성: 인터페이스가 달라도 어댑터를 통해 쉽게 통합할 수 있습니다.
단점
- 복잡성 증가: 어댑터를 추가로 작성해야 하므로 코드 구조가 복잡해질 수 있습니다.
- 성능 문제: 어댑터를 거치면서 약간의 성능 저하가 발생할 수 있습니다.
어댑터 패턴의 활용 사례
- API 통합: 서로 다른 API를 사용하는 시스템 간 데이터 변환.
- 플러그인 시스템: 서로 다른 인터페이스를 가진 플러그인을 연결.
- 레거시 코드 유지: 기존 시스템과 새로운 시스템을 함께 사용해야 할 때.
어댑터 패턴은 소프트웨어 설계에서 인터페이스 간의 차이를 해결하고, 새로운 요구사항을 유연하게 처리할 수 있도록 돕는 중요한 디자인 패턴입니다. 이번 포스팅에서는 어댑터 패턴의 기본 개념과 Java를 활용한 예제를 다뤘습니다. 서로 다른 인터페이스를 가진 객체들을 유연하게 연결할 수 있는 이 패턴은, 특히 레거시 코드와의 호환성 문제를 해결하거나 외부 API를 통합할 때 큰 도움이 됩니다.
다음에도 더 유익한 주제로 찾아뵙겠습니다. 감사합니다!
👀 디자인 패턴에 대해서 더 알아보자!
[JAVA] 디자인 패턴이란?
안녕하세요! 오늘은 소프트웨어 설계에서 자주 언급되는 디자인 패턴(Design Patterns)에 대해 알아보려고 합니다. 디자인 패턴은 개발자들에게 더 나은 설계를 위한 가이드를 제공하며, 효율적인
dev-yeonwha.tistory.com
[JAVA] 디자인패턴 : 콜백(Callback) 패턴 알아보기
안녕하세요! 오늘은 디자인 패턴 중에서도 콜백 메서드라는 개념에 대해 알아보겠습니다. 콜백 메서드는 유연하고 확장 가능한 코드 설계를 가능하게 하며, 특히 비동기 처리나 이벤트 기반 시
dev-yeonwha.tistory.com
[JAVA] 디자인패턴 : 싱글톤 패턴(Singleton Pattern)
안녕하세요! 이번 포스팅에서는 디자인 패턴 중에서도 가장 기본적이고 널리 사용되는 싱글톤 패턴(Singleton Pattern)에 대해 알아보겠습니다. 싱글톤 패턴은 프로그램에서 단 하나의 객체만 생성
dev-yeonwha.tistory.com
'Java' 카테고리의 다른 글
[JAVA] 디자인패턴 : 빌더 패턴(Builder Pattern) (2) | 2025.01.16 |
---|---|
[JAVA] 디자인패턴 : 싱글톤 패턴(Singleton Pattern) (0) | 2025.01.13 |
[JAVA] 디자인패턴 : 콜백(Callback) 패턴 알아보기 (0) | 2025.01.13 |
[OPP] 디자인 패턴이란? (1) | 2025.01.12 |
[JAVA] 제어문(조건문, 반복문) (0) | 2025.01.04 |