Adapter

Adapter ํŒจํ„ด์€ ๊ธฐ์กด ํด๋ž˜์Šค(๋˜๋Š” ๊ฐ์ฒด)๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”๊ตฌํ•˜๋Š” ๋‹ค๋ฅธ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ๊ตฌ์กฐ์  ๋””์ž์ธ ํŒจํ„ด์ž…๋‹ˆ๋‹ค.

   Client
     โ”‚
     โ–ผ
  [Target]
     โ–ฒ
     โ”‚
 [Adapter] โ”€โ”€โ”€โ”€โ†’ [Adaptee]

์ฆ‰, ๊ธฐ์กด ํด๋ž˜์Šค์˜ ๊ธฐ๋Šฅ์€ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋ฉด์„œ๋„ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ธฐ๋Œ€ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งž์ถฐ์ฃผ์–ด, ๋‘ ์‹œ์Šคํ…œ ๊ฐ„์˜ ํ˜ธํ™˜์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ํƒ€๊ฒŸ(Target): ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค์ž…๋‹ˆ๋‹ค.

  • ์–ด๋Œ‘ํ‹ฐ(Adaptee): ๊ธฐ์กด์— ์กด์žฌํ•˜๋Š”, ์›ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค์™€ ๋‹ค๋ฅธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ฐ€์ง„ ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค.

  • ์–ด๋Œ‘ํ„ฐ(Adapter): ์–ด๋Œ‘ํ‹ฐ์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํƒ€๊ฒŸ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค.


How do code

// Target ์ธํ„ฐํŽ˜์ด์Šค: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค
public interface MediaPlayer {
    void play(String audioType, String fileName);
}

// Adaptee ํด๋ž˜์Šค: ๊ธฐ์กด์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ฐ€์ง„ ํด๋ž˜์Šค
public class AdvancedMediaPlayer {
    public void playVlc(String fileName) {
        System.out.println("Playing vlc file. Name: " + fileName);
    }
    
    public void playMp4(String fileName) {
        System.out.println("Playing mp4 file. Name: " + fileName);
    }
}
// Adapter ํด๋ž˜์Šค: Adaptee์˜ ๊ธฐ๋Šฅ์„ Target ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
public class MediaAdapter implements MediaPlayer {
    private AdvancedMediaPlayer advancedMediaPlayer;
    
    public MediaAdapter(String audioType) {
        advancedMediaPlayer = new AdvancedMediaPlayer();
    }
    
    @Override
    public void play(String audioType, String fileName) {
        if(audioType.equalsIgnoreCase("vlc")) {
            advancedMediaPlayer.playVlc(fileName);
        } else if(audioType.equalsIgnoreCase("mp4")) {
            advancedMediaPlayer.playMp4(fileName);
        }
    }
}
// AudioPlayer๋Š” Target ์ธํ„ฐํŽ˜์ด์Šค(MediaPlayer)๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
public class AudioPlayer implements MediaPlayer {
    private MediaAdapter mediaAdapter;
    
    @Override
    public void play(String audioType, String fileName) {
        if(audioType.equalsIgnoreCase("mp3")) {
            System.out.println("Playing mp3 file. Name: " + fileName);
        } else if(audioType.equalsIgnoreCase("vlc") || audioType.equalsIgnoreCase("mp4")) {
            mediaAdapter = new MediaAdapter(audioType);
            mediaAdapter.play(audioType, fileName);
        } else {
            System.out.println("Invalid media. " + audioType + " format not supported.");
        }
    }
}

Last updated