λ€νμ±μ΄λ μΌλ°μ μΌλ‘ μ΄λ€ κ°μ²΄λ₯Ό λ€μν ννλ‘ λ³νμν¬ μ μλ μ±μ§μ λλ€.
μ€λ²λΌμ΄λ©μ΄λ μ€λ²λ‘λ©, μ λ€λ¦, νμ μΊμ€νΈλ λκ² λ³΄μλ©΄ λ€νμ±μ μΌμ’ μ΄λΌκ³ ν μ μκ³ ,
μμμ λΉμ°ν λ€νμ±μ ꡬννκΈ° μν κ°λ μ λλ€.
μΈν°νμ΄μ€ μμ λ€νμ±μ λνμ μΈ μμμ΄λ©°, λ§€μ° μ€μνλ€κ³ ν μ μμ΅λλ€.
κ°λ¨ν μμλ₯Ό λ€μ΄λ³΄κ² μ΅λλ€.
public interface IAttackAction
{
stringΒ DoAttack();
}
public class NormalAttack : IAttackAction
{
public string DoAttack()
{
return "μΌλ°κ³΅κ²©";
}
}
public class PowerAttack : IAttackAction
{
public string DoAttack()
{
return "κ°ν곡격";
}
}
.
.
.
public class Player
{
public IAttackAction Action { set; } = null;
public void DoAttack()
{
Console.WriteLine(Action.DoAttack());
}
}
...
// μΈν°νμ΄μ€λ₯Ό ꡬνν ν΄λμ€λ€μ λͺ¨λ Actionμ ν λΉν μ μμ΅λλ€.
Player player = new Player();
player.Action = new PowerAttack();
player.DoAttack(); // "μΌλ°κ³΅κ²©" μΆλ ₯
player.Action = new NormalAttack();
player.DoAttack(); // "κ°ν곡격" μΆλ ₯
μΈν°νμ΄μ€λ κ΅¬μ‘°κ° λ³΅μ‘νμ§ μμ΅λλ€.
μΈν°νμ΄μ€λ (μΌλ°μ μΌλ‘) λ©μλμ λμμ μ μνμ§ μμ΅λλ€.
μΈν°νμ΄μ€λ (μΌλ°μ μΌλ‘) λ©€λ²λ³μλ₯Ό μ μΈν μ μμ΅λλ€.
μΈν°νμ΄μ€λ λ€μν ννλ‘ λ³νμν¬ μ μλ μ±μ§μ λλλ€.
μΌλ° μμμ΄λ μΆμ ν΄λμ€μλ λ€λ₯Έ μ±κ²©μ λκ³ μκ³ ,
μ΄λ λ¨μν μμμ λλΉ΅νκΈ° μν΄ λμ¨ κ°λ μ΄ μλλ©° λ§€μ° λ€μν μ΄μ λ‘ μΈν°νμ΄μ€λ₯Ό μ¬μ©ν©λλ€.
κ°λ°μλΆλ€μ΄ λ§μ κ°€λ¬λ¦¬μμ μμμ μΈ μ΄μΌκΈ°λ₯Ό λλ €μ μ£μ‘νκΈ°λ ν©λλ€λ§,
ν΄κ·Όνκ³ μ€λ λ€μ μλͺ»λ μ λ³΄κ° μ λ¬λλ κ² κ°μ λΆλλ¬μμ λ¬΄λ¦ μ°κ³ λ§μλ립λλ€.
μ€λ₯μ λν μ§μ μ νμν©λλ€.
(λ©μλ μ΄λ¦ κ°λ‘κ°λ€, μμκ° μ’κ°λ€ λ€ μ’μ΅λλ€)
μ°μ¬ν΄μ£ΌμΈμ
γ΄γ΄
μμΌλ‘ μ€κ°€κ°μ μ’κ°μκΈμ’ μ°μ§ λ§λ €λ¬΄λ
μ€κ°€μ κΈ κ±°μ μμ¨μ γ κ·Έλ₯ μ λν° κΉ¨μκΉ¨μ λ§μ§λ€κ° 첫μΈμμ΄ λ³λ‘μ¬μ μ 리ν건λ°,, κ·Έκ² μ¬κΈ°κΉμ§ μ¬ μ€μ λͺ°λμ£
μμ°μ μλ μ΄ κ°λ μΈκ°€κΈ νΌκ°μ μ€λ² κ°λλ§λ€ μ€κ°€λ¬ λͺ°λ €μμ λ§κΈλ‘ κ°μ§λλ¨μ΄μ μΈκ°€μμ μ€κ°€ λ³λ‘ μμ’μν¨ μ μ΄μ λκ°μλ΄μ© μΈκ°€μ μ¬λ ΈμΌλ©΄ λμλ°μμμ΄ μ§μ μ λλ§ μ¬λΌμμ
ν νΌ νμ΄ν ν΄λΌ
λλ μ΄μ κ°λ°μΌμ§ γ±γ± νμ γ γ
μμΌλ‘κ° κΈ°λλλ κ²μ΄μΌμ€ !
νλ‘κ·Έλλ° κ°€λ‘
λ©€λ² λ³μ λμ νλ‘νΌν°λ‘ ꡬνκ°λ₯ν¨
μΈν°νμ΄μ€ μ°λ©΄μ νλ‘νΌν°λ λ©€λ²λ μ¨λ³Έ μ μ΄ μμ΄μ μμ λͺ¨λ₯΄κ² λλ°, μλ§ μμλ‘λ§ μ μΈ κ°λ₯νλ κ±Έλ‘ μκ³ λ μμ΅λλ€. κ°μΈμ μΌλ‘λ μΈν°νμ΄μ€μ μλ μ©λμ μ΄κΈλλ κΈ°λ₯λ€μ΄λΌκ³ μκ°ν΄μ λν΄νΈ λ©μλλ μμ μ μΈ κΈ°λ₯μ΄ μμ΄λ μ μ°μ§ μκ³ μμ΄μ.
λλ μ’ μΈν°νμ΄μ€ κΈ°λ₯μ΄ λ€μνμΌλ©΄ μ’κ² μ μλ₯Όλ€μ΄ νμ μμ±μ μ μλΌλ κ° μμΌλ©΄ μ’μκ±°κ°μ
νΈλ νλκΉμ νλ λ λ§νκ³ μΆμλ° μ νμ₯ νλ‘νΌν°λ μ§μμ μν΄μ£Όλκ±ΈκΉ μΆμ μ΄κ²λ§ λλ©΄ μμ² νΈν΄μ§ν λ° μλ μλ μ¬ν΄ μ λ°μ΄νΈν΄μ€λ€ ν΄λκ³ κ²°κ΅ μλ거보면 λκ° κΈ°μ μ μΈ λ¬Έμ κ° μλ λ―
public IAttackAction Action { set; } = null;μ λκ°μ? λͺ¨μλ§ λ³΄λ©΄ μΈν°νμ΄μ€μ μΈμ€ν΄μ€λ₯Ό λ§λλ κ² κ°λ€μ
κ·Έλ° μλλ‘ λ§λ€μ΄ λ κ²μ λ§μμ. κ·Έλ°λ° μΆμν΄λμ€λ μΈν°νμ΄μ€λ κ·Έ μμ²΄λ‘ μΈμ€ν΄μ€λ₯Ό λ§λ€ μλ μκ³ , μμ νΉμ ꡬνν ν΄λμ€λ₯Ό ν λΉν΄ μ€μΌ ν©λλ€.
public IAttackAction Action = new NormalAttack() νΉμ new PowerAttack() μ΄λ κ²μ.
μ λ μΈν°νμ΄μ€μ μΈμ€ν΄μ€λ₯Ό λ§λ€ μ μλ€κ³ μκ³ μλλ° μ μ½λλ μ΄λ€ μλ―ΈμΈκ°μ?:
μΌμ’ μ.. λ€νμ±μ νμ©νλ κ°λ μ λλ€. μ΄λ€ μΈμ€ν΄μ€λ₯Ό νμ©νλλμ λ°λΌμ DoAttack() λ©μλμ λμμ΄ λ¬λΌμ§λκΉμ.
λ§μ½μ Actionμ λ Έλ© μ΄νμ λ£μ΄μ£Όλ©΄ λ Έλ© μ΄νμ λ§λ DoAttack() λ©μλκ° μ€νλ κ±°κ³ , νμ μ΄νμ λ£μ΄μ£Όλ©΄ νμ μ΄νμ λ§λ DoAttack()μ΄ μ€νμ΄ λκ² μ£ !
IAttackAction νμμ Actionμ΄λΌλ μ°κΈ° μ μ© νλ‘νΌν°λ₯Ό λ§λλλ° κ±°κΈ°μ nullμ λμ νλ?? μ΄ν΄κ° μλΌμ
그건 μΌμ’ μ μ½λ 컨벀μ μ λλ€. μ λ κ² μ°μ§ μμλ λ³λ‘ μκ΄μμ΅λλ€. μΌνΈμ μ μΈν λ³μλ μ€ν μμμ κ°λ₯΄ν€κ³ , μ€λ₯Έμͺ½μ ν μμμ κ°λ₯΄ν€κ³ μκΈ° λλ¬Έμ ν μμμ μ΄κΈ°κ°μ nullλ‘ μ‘μμ£Όκ² λ€κ³ λͺ μμ μΌλ‘ ννν κ²μ λλ€.
???? κ·Έλμ μ΄ μ½λκ° νλ μΌμ νμ΄μ λ§νλ©΄ λ νλ 건κ°μ?? μ κ° μ’λ΄λΉλΌμ κ·Έλ°κ° μ΄ν΄κ° μλ¨
{ set; } μ΄κ±΄ νλ‘νΌν°μΈμ€λ§ μμλλ° IAttackActionμ΄ κ΅¬νλ μΈμ€ν΄μ€μΈκ° λμλ¦°μ§ λͺ¨λ₯΄κ² μ΄μ
IAttackAction μΈν°νμ΄μ€λ₯Ό ꡬνν κ°μ²΄λΌλ©΄ μ΄λ€ κ°μ²΄λ λ£μ΄μ€ μ μλ λ©€λ²λ₯Ό λ§λ€μ΄ λκ±°μ£ . nullλ‘ μ΄κΈ°ν μμΌ°κΈ° λλ¬Έμ μ μ체λ‘λ μλ¬΄λ° κΈ°λ₯μ΄ μμ΅λλ€. κ·Έλ¬λ κ±°κΈ°μ μΈμ€ν΄μ€λ₯Ό λ£μ΄μ£Όλ©΄ λλμ΄ κΈ°λ₯μ΄ μκΈ°λκ±°μ£ . ꡬνν κ°μ²΄λ§λ€ λμΌν μ΄λ¦μ DoAttack()μ΄λΌλ λ©μλκ° μκ² μ§λ§, μ΄λ€ ꡬν체λ₯Ό μ§μ΄λ£λλμ λ°λΌ μ€μ λμμ λ€λ₯Έ λ°©μμΌλ‘ μ΄λ€μ§κ² μ£ ?
μ΄ λΆλΆμ μΈν°νμ΄μ€μ μμμ μ§μ ꡬνν΄ λ³΄μλκ² μ΄ν΄κ° λΉ λ₯΄μ€ κ² κ°μ΅λλ€! μ μ΄λλ¦° μμ κ° μ© μ’μ§ μμ§λ§ 볡μ¬ν΄μ λΉμ£ΌμΌ μ€νλμ€μ μ§μ λΆμ¬λ£μ΄ 보μκ³ μμλ°μ κ°μ²΄λ μ¬λ¬κ° λ§λ€μ΄ 보μκ³ μ§μ μΈν°νμ΄μ€ μμ ꡬν κ°μ²΄ μ§μ΄ λ£μΌμλ©΄μ ν μ€νΈ ν΄λ³΄μλ©΄ κΈλ°© μ΄ν΄ κ°μ€κ±°μμ
μ!!!!!!!!!!!!!!!!!! μ΄ν΄νλ€ κ·Όλ° λ§μ§λ§ μμ μΌλ°κ³΅κ²©μΆλ ₯ κ°ν곡격μΆλ ₯μ μ€μλ‘ λ°λλ‘ μ μΌμ κ±°?
κ·Έλ λ€μ. μ΄λμ λ¨μ ν μ€νΈκ° μ€μνλ€κ³ ν©λλ€.