반응형

 

안녕하세요 취업길잡이 Coy입니다

오늘은 어댑터 패턴(Adater Pattern)에 대해서 알아보도록 하겠습니다.

 

어댑터 패턴이란

어댑터 패턴은 소프트웨어 디자인에서 호환되지 않는 인터페이스를 연결하여 기존 클래스들이 새로운 클래스나 인터페이스와 함께 동작할 수 있도록 하는 구조적인 설계 패턴입니다.

이 패턴은 기존 코드를 변경하지 않고도 새로운 요구사항에 대응하거나 외부 라이브러리를 통합하는 등의 상황에서 유용하게 활용됩니다. 어댑터 패턴을 사용하면 호환성이 없는 코드를 함께 사용할 수 있어서 코드의 재사용성과 유연성을 향상시킬 수 있습니다.

주로 클라이언트와 서버 사이의 인터페이스 불일치 문제를 해결하기 위해 사용되며, 클라이언트는 어댑터를 통해 새로운 인터페이스를 사용하게 됩니다. 이렇게 함으로써 소프트웨어의 유지보수성과 확장성을 높일 수 있습니다.

 

예를 들어, 한국에서는 220V 전기를 사용하는데, 해외에서는 110V 전기를 사용하는 경우가 있습니다.

이때 한국에서 제조된 전자제품을 해외에서 사용하려면 110V 전원을 제공하는 어댑터를 사용해야 합니다.

이 어댑터는 한국 제품의 220V 전원을 110V로 변환하여 호환성 문제를 해결해 줍니다.

마찬가지로, 소프트웨어에서도 어댑터 패턴을 사용하여 호환되지 않는 인터페이스를 연결하여 기능을 확장하거나 새로운 기능을 추가할 수 있습니다

 

 

사용하는 목적

  1. 호환성 문제 해결: 기존에 존재하는 클래스나 라이브러리의 인터페이스가 요구사항과 맞지 않을 때, 어댑터 패턴을 사용하여 호환성 문제를 해결할 수 있습니다.
  2. 레거시 코드 재사용: 이미 만들어진 레거시 코드를 수정할 수 없는 경우에도 어댑터 패턴을 활용하여 해당 코드를 재사용할 수 있습니다.
  3. 새로운 인터페이스 적용: 이미 구축된 클래스를 새로운 인터페이스에 맞게 개조할 때 어댑터 패턴을 사용할 수 있습니다.
  4. 구 버전과 신 버전 공존: 소프트웨어의 구 버전과 신 버전을 함께 사용하고 싶을 때, 어댑터 패턴을 활용하여 두 버전 간의 호환성을 유지할 수 있습니다.
  5. 코드 수정 최소화: 기존 클래스의 소스 코드를 변경하지 않고도 새로운 인터페이스에 맞게 호환 작업을 수행하여 코드 수정을 최소화할 수 있습니다.

 

 

 

구조

 

예제코드

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

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기