์ด๋ํฐ ํจํด (Adapter Pattern)
์๋ก ๋ค๋ฅธ ์ธํฐํ์ด์ค๋ฅผ ๊ฐ์ง ํด๋์ค๋ค์ด ํจ๊ป ๋์ํ ์ ์๋๋ก ์ค๊ฐ์์ ๋ณํํด์ฃผ๋ ํจํด์
๋๋ค. ๋ง์น 220V ์ฝ์ผํธ๋ฅผ 110V๋ก ๋ณํํด์ฃผ๋ ์ด๋ํฐ์ฒ๋ผ, ํธํ๋์ง ์๋ ์ธํฐํ์ด์ค๋ค์ ์ฐ๊ฒฐํด์ฃผ๋ ์ญํ ์ ํฉ๋๋ค.
์ฃผ์ ๋ชฉ์
โข
๊ธฐ์กด ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ํธํ๋์ง ์๋ ํด๋์ค๋ค์ ํจ๊ป ๋์ํ๊ฒ ๋ง๋ฆ
โข
๋ ๊ฑฐ์ ์ฝ๋๋ฅผ ์๋ก์ด ์ฝ๋์ ํตํฉํ ๋ ์ ์ฉ
โข
์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ๊ณผ ์ ์ฐ์ฑ ํฅ์
ํน์ง
โข
ํด๋์ค ์ด๋ํฐ์ ๊ฐ์ฒด ์ด๋ํฐ ๋ ๊ฐ์ง ๋ฐฉ์์ผ๋ก ๊ตฌํ ๊ฐ๋ฅ
โข
๊ธฐ์กด ์์คํ
์ ์์ ์์ด ์๋ก์ด ๊ธฐ๋ฅ ์ถ๊ฐ ๊ฐ๋ฅ
โข
๋จ์ผ ์ฑ
์ ์์น(SRP)์ ์ค์ํ์ฌ ์ธํฐํ์ด์ค ๋ณํ ๋ก์ง์ ๋ถ๋ฆฌ
์์ ์ฝ๋
// Target Interface
interface MediaPlayer {
void play(String filename);
}
// Adaptee
class AdvancedMediaPlayer {
void playMp4(String filename) {
System.out.println("Playing mp4: " + filename);
}
}
// Adapter
class MediaAdapter implements MediaPlayer {
private AdvancedMediaPlayer advancedPlayer;
public MediaAdapter() {
advancedPlayer = new AdvancedMediaPlayer();
}
@Override
public void play(String filename) {
advancedPlayer.playMp4(filename);
}
}
Java
๋ณต์ฌ
์ฝ๋ ์ค๋ช
์ ์์ ์ฝ๋๋ ๋ฏธ๋์ด ํ๋ ์ด์ด์ ์ด๋ํฐ ํจํด ๊ตฌํ์ ๋ณด์ฌ์ค๋๋ค:
โข
MediaPlayer (Target Interface): ํด๋ผ์ด์ธํธ๊ฐ ์ฌ์ฉํ ์ผ๋ฐ์ ์ธ ๋ฏธ๋์ด ์ฌ์ ์ธํฐํ์ด์ค๋ฅผ ์ ์ํฉ๋๋ค.
โข
AdvancedMediaPlayer (Adaptee): MP4 ํ์ผ์ ์ฌ์ํ ์ ์๋ ๊ณ ๊ธ ๋ฏธ๋์ด ํ๋ ์ด์ด ํด๋์ค์
๋๋ค. ์ด๋ ๊ธฐ์กด์ ์กด์ฌํ๋ ํด๋์ค๋ก ์ง์ ์ ์ผ๋ก MediaPlayer ์ธํฐํ์ด์ค์ ํธํ๋์ง ์์ต๋๋ค.
โข
MediaAdapter (Adapter): MediaPlayer ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ณ ๋ด๋ถ์ ์ผ๋ก AdvancedMediaPlayer๋ฅผ ์ฌ์ฉํ์ฌ ๋ ์ธํฐํ์ด์ค ๊ฐ์ ๋ณํ์ ์ฒ๋ฆฌํฉ๋๋ค.
์ด ๊ตฌํ์ ํตํด ํด๋ผ์ด์ธํธ๋ MediaPlayer ์ธํฐํ์ด์ค๋ง์ ์๊ณ ์์ด๋ AdvancedMediaPlayer์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๊ฒ ๋ฉ๋๋ค. ์ด๋ํฐ๋ play() ๋ฉ์๋ ํธ์ถ์ ์ ์ ํ playMp4() ๋ฉ์๋ ํธ์ถ๋ก ๋ณํํฉ๋๋ค.