CS

[๋””์ž์ธ ํŒจํ„ด] 01. ์–ด๋Œ‘ํ„ฐ ํŒจํ„ด (adapter pattern)

sun_young 2025. 1. 29. 22:08
๐Ÿ”Ž์–ด๋Œ‘ํ„ฐ ํŒจํ„ด
ํด๋ž˜์Šค๋ฅผ ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋Š”๋ฐ ์ค‘๊ฐ„์—์„œ ๋ณ€ํ™˜ ์—ญํ• ์„ ํ•ด์ฃผ๋Š” ํด๋ž˜์Šค๋ฅผ ์–ด๋Œ‘ํ„ฐ ํŒจํ„ด์ด๋ผ๊ณ  ํ•œ๋‹ค.

 

EX)

C ํƒ€์ž…๋งŒ ์ง€์›ํ•˜๋Š” ๋งฅ๋ถ์— USB ํฌํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•œ๋‹ค๋ฉด USB์™€ Cํƒ€์ž…์„ ํ˜ธํ™˜ํ•  ์ˆ˜ ์žˆ๋Š” ์–ด๋Œ‘ํ„ฐ๊ฐ€ ํ•„์š”ํ•˜๋‹ค. 

์–ด๋Œ‘ํ„ฐ๋ฅผ ํ†ตํ•ด ์–ด๋– ํ•œ USB ํฌํŠธ๋ฅผ ๊ฐ€์ ธ์™€๋„ Cํƒ€์ž…์˜ ๋งฅ๋ถ์—์„œ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. 

์ด์ฒ˜๋Ÿผ ์ค‘๊ฐ„์—์„œ ํ•„์š”๋กœ ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ์–ด ํ•จ๊ป˜ ๋™์ž‘ํ•  ์ˆ˜ ์—†๋Š” ํด๋ž˜์Šค๋“ค์ด ํ•จ๊ป˜ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ํŒจํ„ด์ด๋‹ค.

 

์ฝ”๋“œ๋กœ ์–ด๋Œ‘ํ„ฐ ํŒจํ„ด ์ดํ•ดํ•˜๊ธฐ

public interface Duck {
    public void quack();
    public void fly();
}
public interface Turkey {
    public void gobble();
    public void fly();
}
public class WildTurkey implements Turkey {
    @Override
    public void gobble() {
    	System.out.println("gobble");
    }
    
    @Override
    public void fly() {
    	System.out.println("fly");
    }
}
public class TurkeyAdapter implements Duck {
    Turkey turkey;
    
    public TurkeyAdapter(Turkey turkey) {
    	this.turkey = turkey;
    }
    
    @Override
    public void quack() {
    	turkey.gobble();
    }
    
    @Override
    public void fly() {
    	turkey.fly();
    }
}
  • Duck ๋Œ€์‹  Turkey ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•  ๋•Œ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— Turkey ๊ฐ์ฒด๋ฅผ ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค. ๋”ฐ๋ผ์„œ ์–ด๋Œ‘ํ„ฐ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋„๋ก ํ•œ๋‹ค.
WildTurkey turkey = new WildTurkey();
Duck turkeyAdapter = new TurkeyAdapter(turkey);

testDuck(turkeyAdapter);

public static void testDuck(Duck duck) {
    duck.quack();
    duck.fly();
}
  • testDuck ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ turkey ๊ฐ์ฒด ๊ทธ๋Œ€๋กœ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. turkey ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ testDuck ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์œ„ํ•ด ์ค‘๊ฐ„์— TurkeyAdapter๋ฅผ ์‚ฌ์šฉํ•˜์˜€๋‹ค.

๋งˆ๋ฌด๋ฆฌ

์–ด๋Œ‘ํ„ฐ ํŒจํ„ด์€ ์ฝ”๋“œ ๋ณ€๊ฒฝ์ด ์–ด๋ ค์šด ํด๋ž˜์Šค๋ฅผ ์›ํ•˜๋Š” ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•  ๋•Œ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

ํด๋ž˜์Šค์˜ ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ ์–ด๋ ค์šด ๊ฒฝ์šฐ

  1. ์ด๋ฏธ ๋งŽ์€ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ณต์šฉ ์ฝ”๋“œ์˜ ๊ฒฝ์šฐ
  2. ์–ด๋–ค ํด๋ž˜์Šค๊ฐ€ ๋ฒ„์ „ ์—… ๋œ ๊ฒฝ์šฐ ํ•˜์œ„ ๋ฒ„์ „์˜ ํด๋ž˜์Šค์—๋„ ์ง€์›ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ

 

๋”๋ณด๊ธฐ