JAVA

JAVA 디자인패턴 - 어댑터(Adapter) 패턴

TECH 톡마스터 2023. 7. 12.

[ 목차 ]

    JAVA 디자인패턴 - 어댑터(Adapter) 패턴
    JAVA 디자인패턴 - 어댑터(Adapter) 패턴

    안녕하세요.  오늘 알아볼 패턴은 어댑터(Adapter) 패턴입니다.

    1. 어댑터(Adapter) 패턴 이란?

    어댑터 패턴은 디자인 패턴 중 하나로, 서로 다른 인터페이스를 가진 클래스 또는 객체를 협력할 수 있도록 중간에서 연결해 주는 역할을 합니다. 즉, 기존 구현에서 변경 없이 호환되지 않는 클래스를 함께 사용할 수 있도록 변환해 주는 것이 목적입니다.

    2. 어댑터(Adapter) 패턴 구현 방법 및 코드

    어댑터 패턴을 구현하기 위해 필요한 요소는 다음과 같습니다.

    • Target 인터페이스: 클라이언트가 사용하는 인터페이스입니다.
    • Adaptee 클래스: 변환해야 하는 인터페이스를 가진 클래스입니다.
    • Adapter 클래스: Target 인터페이스를 구현하며, Adaptee 클래스와의 결합을 촉진시키는 클래스입니다.
    // Target 인터페이스
    interface MediaPlayer {
        void play(String mediaType, String fileName);
    }
    
    // Adaptee 클래스
    class LegacyMediaPlayer {
        void playAudioFile(String fileName) {
            System.out.println("Playing audio file: " + fileName);
        }
    }
    
    // Adapter 클래스
    class MediaPlayerAdapter implements MediaPlayer {
        private LegacyMediaPlayer legacyMediaPlayer;
    
        public MediaPlayerAdapter(LegacyMediaPlayer legacyMediaPlayer) {
            this.legacyMediaPlayer = legacyMediaPlayer;
        }
    
        @Override
        public void play(String mediaType, String fileName) {
            if ("audio".equalsIgnoreCase(mediaType)) {
                legacyMediaPlayer.playAudioFile(fileName);
            } else {
                System.out.println("Unsupported media type: " + mediaType);
            }
        }
    }
    
    // 클라이언트 코드
    public class Main {
        public static void main(String[] args) {
            LegacyMediaPlayer legacyMediaPlayer = new LegacyMediaPlayer();
            MediaPlayer mediaPlayer = new MediaPlayerAdapter(legacyMediaPlayer);
    
            mediaPlayer.play("audio", "music.mp3");
            mediaPlayer.play("video", "movie.mp4");
        }
    }
    • MediaPlayer는 타깃 인터페이스로, 클라이언트가 사용할 인터페이스를 정의합니다. 이 경우 'play' 메서드를 포함하며, 이 메서드는 미디어 유형('mediaType')과 파일 이름('fileName')을 매개변수로 받습니다.
    • LegacyMediaPlayer는 변환하려는 인터페이스를 갖는 클래스로, 오디오 파일만 재생할 수 있는 'playAudioFile' 메서드를 포함합니다.
    • MediaPlayerAdapter는 MediaPlayer 인터페이스를 구현하고, 내부적으로 LegacyMediaPlayer 객체의 참조를 가져와서 사용합니다. MediaPlayer의 'play' 메서드를 구현할 때 'mediaType'이 오디오인 경우에만 LegacyMediaPlayer 인스턴스의 'playAudioFile' 메서드를 호출하고, 그렇지 않으면 "Unsupported media type" 메시지를 출력합니다.
    • 메인에서는 LegacyMediaPlayer를 생성한 후, MediaPlayerAdapter를 통해 MediaPlayer 인터페이스를 구현하는 객체로 변환합니다. 클라이언트는 변환된 mediaPlayer 인스턴스를 사용하여 오디오 파일('music.mp3') 및 비디오 파일('movie.mp4')을 재생합니다.

    3. 어댑터(Adapter) 패턴의 장단점

    3.1. 장점

    • 과거 코드를 수정하지 않고도 호환성 확보가 가능합니다.
    • 여러 인터페이스를 같은 형태로 사용할 수 있어 개발자가 작업을 수월하게 처리할 수 있습니다.

    3.2. 단점

    • 추가적인 코드(어댑터 클래스)가 필요하여 복잡성이 증가할 수 있습니다.
    • 모든 기능에 대한 어댑터를 작성해야 할 수도 있어 많은 작업량이 발생할 수 있습니다.

    4. 어댑터(Adapter) 패턴의 활용 예

    어댑터 패턴은 여러 환경에서 활용가능하며, 주로 기존에 사용하던 시스템이나 라이브러리와 새로운 시스템 간의 호환성 문제를 해결할 때 유용합니다. 예를 들어 다양한 오디오 포맷을 지원하는 미디어 플레이어를 만드는 과정에서, 기존의 오디오 플레이어를 새로운 플레이어와 호환되게끔 작업할 때 어댑터 패턴을 사용할 수 있습니다.

     

    2023.07.12 - [JAVA] - 디자인패턴 - 팩토리(Factory) 패턴

     

    디자인패턴 - 팩토리(Factory) 패턴

    2023.07.12 - [JAVA] - 디자인패턴 - 싱글톤(Singleton) 패턴 [ 목차 ] 안녕하세요. 이번에는 팩토리(Factory) 패턴에 대해서 알아보도록 하겠습니다. 1. 팩토리(Factory) 패턴 이란? 팩토리 패턴은 객체 생성을

    tech.dj-tiger.com

    2023.07.12 - [JAVA] - 디자인패턴 - 팩토리(Factory) 패턴

     

    디자인패턴 - 팩토리(Factory) 패턴

    2023.07.12 - [JAVA] - 디자인패턴 - 싱글톤(Singleton) 패턴 [ 목차 ] 안녕하세요. 이번에는 팩토리(Factory) 패턴에 대해서 알아보도록 하겠습니다. 1. 팩토리(Factory) 패턴 이란? 팩토리 패턴은 객체 생성을

    tech.dj-tiger.com

    2023.07.12 - [JAVA] - 디자인패턴 - 어댑터(Adapter) 패턴

     

    디자인패턴 - 어댑터(Adapter) 패턴

    [ 목차 ] 안녕하세요. 오늘 알아볼 패턴은 어댑터(Adapter) 패턴입니다. 1. 어댑터(Adapter) 패턴 이란? 어댑터 패턴은 디자인 패턴 중 하나로, 서로 다른 인터페이스를 가진 클래스 또는 객체를 협력할

    tech.dj-tiger.com

    2023.07.12 - [JAVA] - Java 디자인패턴 - 옵저버(Observer) 패턴

    2023.07.12 - [JAVA] - JAVA 디자인패턴 - 싱글톤(Singleton) 패턴

     

    디자인패턴 - 싱글톤(Singleton) 패턴

    2023.07.12 - [JAVA] - 디자인패턴 - 팩토리(Factory) 패턴 [ 목차 ] 안녕하세요. 자바에는 다양한 디자인 패턴이 존재하고, 각 패턴은 특정한 문제를 해결하기 위해 설계되었습니다. 적절한 디자인 패턴

    tech.dj-tiger.com

     

    댓글

    💲 추천 글