Adapter_Pattern - 8BitsCoding/RobotMentor GitHub Wiki

์ •์˜

์‚ฌ์ „์ ์œผ๋กœ Adapter๋ž€ ๊ธฐ๊ณ„,๊ธฐ๊ตฌ ๋“ฑ์„ ๋‹ค๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๋ถ€๊ฐ€๊ธฐ๊ตฌ์ด๋‹ค.

์—ฌ๊ธฐ์„œ ์ƒ๊ฐํ•ด์•„ํ• ๊ฒŒ ๊ธฐ๊ณ„,๊ธฐ๊ตฌ๋Š” ์žˆ๊ณ  ๋ถ€๊ฐ€์ ์œผ๋กœ ์‚ฌ์šฉ์„ ์œ„ํ•œ ๋ถ€๊ฐ€๊ธฐ๊ตฌ์ž„์„ ๊ธฐ์–ตํ•˜์ž

์—ญ์‹œ ์ฝ”๋“œ๋กœ ์„ค๋ช…ํ•ด์•ผ ์ดํ•ด๊ฐ€ ๋  ๋“ฏ.

ํ•ต์‹ฌ์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์š”๊ตฌ์‚ฌํ•ญ์— ๋งž๊ฒŒ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.


์˜ˆ์‹œ๋กœ ์„ค๋ช…

์š”๊ตฌ์‚ฌํ•ญ :

๋‘ ์ˆ˜์— ๋Œ€ํ•œ ๋‹ค์Œ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด ์ฃผ์„ธ์š”

  1. ์ˆ˜์˜ ๋‘ ๋ฐฐ์˜ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ : twiceOf(Float):Float
  2. ์ˆ˜์˜ ๋ฐ˜(1/2)์˜ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ : halfOf(Float):Float

๊ตฌํ˜„ ๊ฐ์ฒด ์ด๋ฆ„์€ 'Adapter'์œผ๋กœ ํ•ด์ฃผ์„ธ์š”

Math ํด๋ž˜์Šค์—์„œ ๋‘ ๋ฐฐ์™€ ์ ˆ๋ฐ˜์„ ๊ตฌํ•˜๋Š” ํ•จ์ˆ˜๋Š” ์ด๋ฏธ ๊ตฌํ˜„๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค.

// Math์—์„œ ๋‘ ๋ฐฐ์™€ ์ ˆ๋ฐ˜์„ ๊ตฌํ˜„ํ•˜๋Š” ํ•จ์ˆ˜๋Š” ๊ตฌํ˜„๋˜์–ด ์žˆ์Œ.
// ๋‹จ, double๋กœ ๋ฐ›๊ณ  double๋กœ ๋ฆฌํ„ด float์œผ๋กœ ๊ณ ์น˜๊ณ  ์‹ถ๋‹ค๋ฉด?
class Math {
public:
    double twoTime(double num) { return num * 2; }
    double half(double num) { return num/2; }
}

ํ•ด๊ฒฐ์ฑ…

class I_Adapter {
public:
    // ์›ํ•˜๋Š” ๊ธฐ๋Šฅ
    virtual float twiceOf(float f);
    virtual float halfOf(float f);
}

class Adapter_impliment : public I_Adapter {
// (์ฐธ๊ณ ) ํ˜•๋ณ€ํ™˜์€ JAVA๋กœ ๊ตฌํ˜„ ํ˜•๋ณ€ํ™˜์€ ์•Œ์•„์„œ ๊ณ ๋ คํ•  ๊ฒƒ.
public:
    Math math;
    float twiceOf(float f) {
        return math.twoTime(f.doubleValue()).floatValue();
    }

    float halfOf(float f) {
        return math.half(f.doubleValue()).floatValue();
    }
}
void main() {
    I_Adapter adapter = new Adapter_impliment();

    adapter.twiceOf(100);
    adapter.haleOf(100);
}

์žฅ์ ์€ ๋А๊ปด์ง€๊ฒ ์ง€๋งŒ ํ•จ์ˆ˜์— ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์„ ๋ถ€๊ฐ€ ํ•  ์ˆ˜ ์žˆ์Œ.


์ฐธ๊ณ ์‚ฌ์ดํŠธ