Template_Method_Pattern - 8BitsCoding/RobotMentor GitHub Wiki

์ •์˜

ํ…œํ”Œ๋ฆฟ ๋ฉ”์†Œ๋“œ : ์ผ์ •ํ•œ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฐ€์ง„ ์š”๊ตฌ์‚ฌํ•ญ์„ ํ…œํ”Œ๋ฆฟ ๋ฉ”์†Œ๋“œ ํŒจํ„ด์„ ์ด์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๊ตฌ์กฐ๋ฅผ ๋ฉ”์†Œ๋“œ์— ์ •์˜ ํ•˜๊ณ  ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ตฌ์กฐ์˜ ๋ณ€๊ฒฝ์—†์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์žฌ์ •์˜ ํ•˜๋Š” ํŒจํ„ด

์–ธ์ œ์“ฐ๋‚˜?

  1. ๊ตฌํ˜„ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์ผ์ •ํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์žˆ๋‹ค.
  2. ๊ตฌํ˜„ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค.

์–ด๋–ค ๋‹จ๊ณ„๋กœ ๋‚˜๋ˆ„์–ด์ € ์žˆ๋Š”๊ฐ€?

  1. ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์—ฌ๋Ÿฌ ๋‹จ๊ณ„๋กœ ๋‚˜๋ˆˆ๋‹ค.
  2. ๋‚˜๋ˆ ์ง„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋‹จ๊ณ„๋ฅผ ๋ฉ”์†Œ๋“œ๋กœ ์„ ์–ธํ•œ๋‹ค.
  3. ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ˆ˜ํ–‰ํ•  ํ…œํ”Œ๋ฆฟ ๋ฉ”์†Œ๋“œ๋ฅผ ๋งŒ๋“ ๋‹ค.
  4. ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ ๋‚˜๋ˆ ์ง„ ๋ฉ”์†Œ๋“œ๋“ค์„ ๊ตฌํ˜„ํ•œ๋‹ค.

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

์—ญ์‹œ ์–ด๋ ต๋‹ค.. ์ฝ”๋“œ๋กœ ๋ณด๋Š”๊ฒŒ ์ •ํ™•

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

  1. ์‹ ์ž‘ ๊ฒŒ์ž„์˜ ์ ‘์†์„ ๊ตฌํ˜„ํ•ด์ฃผ์„ธ์š”
  2. ์œ ์ €๊ฐ€ ๊ฒŒ์ž„์ ‘์†์‹œ ๋‹ค์Œ์„ ๊ณ ๋ คํ•ฉ๋‹ˆ๋‹ค.
  3. ๋ณด์•ˆ ๊ณผ์ • : ๋ณด์•ˆ ๊ด€๋ จ ๋ถ€๋ถ„์„ ์ฒ˜๋ฆฌ
  4. ์ธ์ฆ ๊ณผ์ • : user name ๊ณผ password๊ฐ€ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธ
  5. ๊ถŒํ•œ ๊ณผ์ • : ์ ‘์†์ž๊ฐ€ ์œ ๋กœ ํšŒ์›์ธ์ง€ ๋ฌด๋ฃŒํšŒ์›์ธ์ง€ ๊ฒŒ์ž„ ๋งˆ์Šคํ„ฐ ์ธ์ง€ ํ™•์ธ
  6. ์ ‘์† ๊ณผ์ • : ์ ‘์†์ž์—๊ฒŒ ์ปค๋„ฅ์…˜ ์ •๋ณด๋ฅผ ๋„˜๊ฒจ์ค€๋‹ค.
// ๋‚˜๋ˆ ์ง„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋‹จ๊ณ„๋ฅผ ๋ฉ”์†Œ๋“œ๋กœ ์„ ์–ธ
class AbstGameConnectHelper {
protected:    // ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์™ธ๋ถ€์— ๋…ธ์ถœ๋˜๋ฉด ์•ˆ๋˜๊ธฐ์— protected(ํ•˜์œ„ํด๋ž˜์Šค ์žฌ์„ ์–ธ๊ฐ€๋Šฅํ•˜๊ฒŒํ•จ์œผ๋กœ)๋กœ ์„ ์–ธ(private๊ณผ ๋‹ค๋ฆ„!)
    virtual string doSecurity(string st);
    virtual bool authentication(string id, string password);
    virtual int authorization(string userName);
    virtual string connection(string info);

public:
    string requestConnection(string str);
}

string AbstGameConnectHelper::requestConnection(string str)
{
    // ๋ณด์•ˆ ์ž‘์—…
    string decodedInfo = doSecurity(str);
    // id, password๋ฅผ ๋ฐ›์Œ
    // id, password๋Š” decoedInfo์—์„œ ํŒŒ์‹ฑํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค.

    // ์ธ์ฆ ์ž‘์—…
    if(!authentication(id, password)) {
        // Error
    }

    // ๊ถŒํ•œ ๊ณผ์ •
    int i = authorization(id);
    switch(i) {
        case 1: // ๊ฒŒ์ž„๋งˆ์Šคํ„ฐ
        break;
        case 2: // ์œ ์ €
        break;

        default;
        break;
    }

    return connection(decodedInfo);
}
//๊ตฌํ˜„์ž‘์—…

class DefaultGameConnectHelper : public AbstGameConnectHelper{
    // ์—ฌ๊ธฐ์„œ ์‹ค์ œ ๊ตฌํ˜„์„ ์‹ค์‹œ
protected:
    string doSecurity(string st);
    bool authentication(string id, string password);
    int authorization(string userName);
    string connection(string info);
}
int main() {
    AbstGameConnectHelper helper = new DefaultGameConnectHelper();

    helper->requestConnection("์•„์ด๋”” ์•”ํ˜ธ ๋“ฑ ์ ‘์† ์ •๋ณด");
    // ์—ฌ๊ธฐ์„œ ์ฃผ๋ชฉํ•ด์•ผ ํ•  ์ ์€ doSecurity, authentication, authorization, connection์—๋Š” ์ง์ ‘ ์ ‘๊ทผ์ด ๋ถˆ๊ฐ€๋Šฅ ํ•˜๋‹ค๋Š” ์ ์ด๋‹ค.
}
// ์ถ”๊ฐ€ DefaultGameConnectHelper2๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค๋ฉด?

int main() {
    AbstGameConnectHelper helper = new DefaultGameConnectHelper2();
    // ๊ฐ„๋‹จํ•˜๊ฒŒ DefaultGameConnectHelper2๋กœ ๋ณ€๊ฒฝ

    helper->requestConnection("์•„์ด๋”” ์•”ํ˜ธ ๋“ฑ ์ ‘์† ์ •๋ณด");
}