안녕하세요 취업길잡이 Coy입니다
오늘은 어댑터 패턴(Adater Pattern)에 대해서 알아보도록 하겠습니다.
어댑터 패턴이란
어댑터 패턴은 소프트웨어 디자인에서 호환되지 않는 인터페이스를 연결하여 기존 클래스들이 새로운 클래스나 인터페이스와 함께 동작할 수 있도록 하는 구조적인 설계 패턴입니다.
이 패턴은 기존 코드를 변경하지 않고도 새로운 요구사항에 대응하거나 외부 라이브러리를 통합하는 등의 상황에서 유용하게 활용됩니다. 어댑터 패턴을 사용하면 호환성이 없는 코드를 함께 사용할 수 있어서 코드의 재사용성과 유연성을 향상시킬 수 있습니다.
주로 클라이언트와 서버 사이의 인터페이스 불일치 문제를 해결하기 위해 사용되며, 클라이언트는 어댑터를 통해 새로운 인터페이스를 사용하게 됩니다. 이렇게 함으로써 소프트웨어의 유지보수성과 확장성을 높일 수 있습니다.
예를 들어, 한국에서는 220V 전기를 사용하는데, 해외에서는 110V 전기를 사용하는 경우가 있습니다.
이때 한국에서 제조된 전자제품을 해외에서 사용하려면 110V 전원을 제공하는 어댑터를 사용해야 합니다.
이 어댑터는 한국 제품의 220V 전원을 110V로 변환하여 호환성 문제를 해결해 줍니다.
마찬가지로, 소프트웨어에서도 어댑터 패턴을 사용하여 호환되지 않는 인터페이스를 연결하여 기능을 확장하거나 새로운 기능을 추가할 수 있습니다
사용하는 목적
- 호환성 문제 해결: 기존에 존재하는 클래스나 라이브러리의 인터페이스가 요구사항과 맞지 않을 때, 어댑터 패턴을 사용하여 호환성 문제를 해결할 수 있습니다.
- 레거시 코드 재사용: 이미 만들어진 레거시 코드를 수정할 수 없는 경우에도 어댑터 패턴을 활용하여 해당 코드를 재사용할 수 있습니다.
- 새로운 인터페이스 적용: 이미 구축된 클래스를 새로운 인터페이스에 맞게 개조할 때 어댑터 패턴을 사용할 수 있습니다.
- 구 버전과 신 버전 공존: 소프트웨어의 구 버전과 신 버전을 함께 사용하고 싶을 때, 어댑터 패턴을 활용하여 두 버전 간의 호환성을 유지할 수 있습니다.
- 코드 수정 최소화: 기존 클래스의 소스 코드를 변경하지 않고도 새로운 인터페이스에 맞게 호환 작업을 수행하여 코드 수정을 최소화할 수 있습니다.
구조
예제코드
interface PS2Keyboard {
void type();
}
class PS2KeyboardImpl implements PS2Keyboard {
@Override
public void type() {
System.out.println("Typing using PS/2 keyboard");
}
}
interface USBKeyboard {
void type();
}
class PS2ToUSBAdapter implements USBKeyboard {
private PS2Keyboard ps2Keyboard;
PS2ToUSBAdapter(PS2Keyboard ps2Keyboard) {
this.ps2Keyboard = ps2Keyboard;
}
@Override
public void type() {
System.out.println("Adapter: Converting PS/2 to USB");
ps2Keyboard.type();
}
}
public class Main {
public static void main(String[] args) {
// PS/2 키보드 인스턴스 생성
PS2Keyboard ps2Keyboard = new PS2KeyboardImpl();
// PS/2 to USB 어댑터를 통해 PS/2 키보드를 USB로 연결
USBKeyboard usbKeyboard = new PS2ToUSBAdapter(ps2Keyboard);
// 클라이언트는 USB 키보드를 통해 입력 수행
usbKeyboard.type();
}
}
PS/2 키보드를 나타내는 PS2Keyboard 인터페이스와 이를 구현하는 PS2KeyboardImpl 클래스를 정의합니다.
PS/2 키보드를 USB 키보드로 변환하는 어댑터인 PS2ToUSBAdapter 클래스를 작성하여 PS/2 키보드와 USB 키보드의 인터페이스를 연결합니다.
클라이언트는 PS/2 키보드를 PS2ToUSBAdapter를 통해 USB 키보드로 변환하여 입력을 수행합니다.
어댑터 패턴의 장단점
장점
1. 기존 코드를 변경하지 않고 원하는 인터페이스 구현체를 만들어 재사용할 수 있습니다.
2. 기존 코드를 손상시키지 않는 것은 객체지향 원칙 중 "개방/폐쇄 원칙"에 해당합니다.
3. 기존 코드가 하던 일과 특정 인터페이스 구현체로 변환하는 작업을 각기 다른 클래스로 분리하여 관리할 수 있습니다.
단점
1. 다수의 새로운 인터페이스와 클래스를 도입해야 하므로 구조가 복잡해집니다.
2. 때로는 서비스 클래스를 변경하는 것이 더 간단할 때도 있습니다.
3. 새로운 인터페이스와 어댑터 클래스를 추가해야 하므로 코드의 복잡성이 증가하고 유지 보수가 어려워질 수 있습니다.
오늘 이렇게 어댑터 패턴에 대해서 알아보았습니다
컬럼으로 다루어 주면 좋겠다 싶은 주제가 있으면 댓글로 알려주세요
도움이 필요하시면 사연을 메일로 보내주세요
jek300300@gmail.com
도움이 되셨다면 공감과 구독 부탁드립니다
읽어주셔서 감사합니다
당신의 취업이 성공할 때까지 같이 하겠습니다! by 취업길잡이 Coy
'[2단계] CS 개념 지식 모음집 > 디자인 패턴' 카테고리의 다른 글
[Design Pattern] 프로토타입 패턴(Prototype Pattern) (0) | 2024.03.03 |
---|---|
[Design Pattern] 프록시 패턴(Proxy Pattern) (0) | 2024.02.18 |
[Design Pattern] 빌더 패턴(Builder Pattern) (0) | 2024.02.04 |
[Design Pattern] 상태 패턴(State Pattern) (0) | 2024.01.26 |
[Design Pattern] 데코레이터 패턴(Decorator Pattern) (0) | 2024.01.21 |