Strategy_Pattern - 8BitsCoding/RobotMentor GitHub Wiki

μ •μ˜

μ—¬λŸ¬ μ•Œκ³ λ¦¬μ¦˜μ„ ν•˜λ‚˜μ˜ 좔상적인 접근점을 λ§Œλ“€μ–΄ μ ‘κ·Ό μ μ—μ„œ μ„œλ‘œ κ΅ν™˜ κ°€λŠ₯ν•˜λ„λ‘ ν•˜λŠ” νŒ¨ν„΄.


μ˜ˆμ‹œλ‘œ μ„€λͺ…

μš”κ΅¬μ‚¬ν•­μ΄ λ‹€μŒκ³Ό κ°™λ‹€κ³  κ°€μ •ν•΄λ³΄μž.

μ‹ μž‘ κ²Œμž„μ—μ„œ 케릭터와 무기λ₯Ό κ΅¬ν˜„ν•˜λ €ν•œλ‹€.

λ¬΄κΈ°λŠ” 두 κ°€μ§€ μ’…λ₯˜κ°€ μžˆλ‹€. μΉΌ, κ²€

class I_Weapon {
public:
    virtual void attack();
};

class Knife : public I_Weapon {
    void attack() {
        // κ΅¬ν˜„
    }
};

class Sword : public I_Weapon {
    void attack() {
        // κ΅¬ν˜„
    }
};

class GameCharacter {
private:
    // 접근점
    I_Weapon weapon;

public:
    // κ΅ν™˜μ„ μœ„ν•œ set
    void setWeapon(I_Weapon weapon) {
        this.weapon = weapon;
    }

    void attack() {
        // 델리게이트의 κ°œλ…(싀행을 μ΄μž„ν•¨.)
        weapon.attack();
    }
}

μž₯점이 뭔데?

무기가 μΆ”κ°€λ˜μ—ˆλ‹€κ³  μƒκ°ν•΄λ³΄μž.

// μš”κ±°λ©΄ 끝!
class Ax : public I_Weapon {
    void attack() {
        // κ΅¬ν˜„
    }
};

Pattern


λ‹€μ‹œμ„€λͺ…

μ—¬λŸ¬ μ•Œκ³ λ¦¬μ¦˜μ„ ν•˜λ‚˜μ˜ 좔상적인 접근점(Weapon)을 λ§Œλ“€μ–΄ μ ‘κ·Ό μ μ—μ„œ μ„œλ‘œ κ΅ν™˜(무기λ₯˜) κ°€λŠ₯ν•˜λ„λ‘ ν•˜λŠ” νŒ¨ν„΄.


μ°Έκ³ μ‚¬μ΄νŠΈ