λ‹€ν˜•μ„±μ΄λž€ 일반적으둜 μ–΄λ–€ 객체λ₯Ό λ‹€μ–‘ν•œ ν˜•νƒœλ‘œ λ³€ν™”μ‹œν‚¬ 수 μžˆλŠ” μ„±μ§ˆμž…λ‹ˆλ‹€.


μ˜€λ²„λΌμ΄λ”©μ΄λ‚˜ μ˜€λ²„λ‘œλ”©, μ œλ„€λ¦­, νƒ€μž… μΊμŠ€νŠΈλ„ λ„“κ²Œ 보자면 λ‹€ν˜•μ„±μ˜ 일쒅이라고 ν•  수 있고,

상속은 λ‹Ήμ—°νžˆ λ‹€ν˜•μ„±μ„ κ΅¬ν˜„ν•˜κΈ° μœ„ν•œ κ°œλ…μž…λ‹ˆλ‹€.


μΈν„°νŽ˜μ΄μŠ€ μ—­μ‹œ λ‹€ν˜•μ„±μ˜ λŒ€ν‘œμ μΈ μ˜ˆμ‹œμ΄λ©°, 맀우 μ€‘μš”ν•˜λ‹€κ³  ν•  수 μžˆμŠ΅λ‹ˆλ‹€.


κ°„λ‹¨νžˆ μ˜ˆμ‹œλ₯Ό λ“€μ–΄λ³΄κ² μŠ΅λ‹ˆλ‹€.



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(); // "κ°•ν•œκ³΅κ²©" 좜λ ₯



μΈν„°νŽ˜μ΄μŠ€λŠ” ꡬ쑰가 λ³΅μž‘ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

μΈν„°νŽ˜μ΄μŠ€λŠ” (일반적으둜) λ©”μ†Œλ“œμ˜ λ™μž‘μ„ μ •μ˜ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

μΈν„°νŽ˜μ΄μŠ€λŠ” (일반적으둜) λ©€λ²„λ³€μˆ˜λ₯Ό μ„ μ–Έν•  수 μ—†μŠ΅λ‹ˆλ‹€.

μΈν„°νŽ˜μ΄μŠ€λŠ” λ‹€μ–‘ν•œ ν˜•νƒœλ‘œ λ³€ν™”μ‹œν‚¬ 수 μžˆλŠ” μ„±μ§ˆμ„ λ•λ‹ˆλ‹€.


일반 μƒμ†μ΄λ‚˜ 좔상 ν΄λž˜μŠ€μ™€λŠ” λ‹€λ₯Έ 성격을 띄고 있고,

μ΄λŠ” λ‹¨μˆœνžˆ 상속을 λ•œλΉ΅ν•˜κΈ° μœ„ν•΄ λ‚˜μ˜¨ κ°œλ…μ΄ μ•„λ‹ˆλ©° 맀우 λ‹€μ–‘ν•œ 이유둜 μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.


κ°œλ°œμžλΆ„λ“€μ΄ λ§Žμ€ κ°€λŸ¬λ¦¬μ—μ„œ 상식적인 이야기λ₯Ό λ“œλ €μ„œ μ£„μ†‘ν•˜κΈ°λŠ” ν•©λ‹ˆλ‹€λ§Œ,

ν‡΄κ·Όν•˜κ³  μ˜€λ‹ˆ λ‹€μ†Œ 잘λͺ»λœ 정보가 μ „λ‹¬λ˜λŠ” 것 κ°™μ•„ λΆ€λ„λŸ¬μ›€μ„ 무릅쓰고 λ§μ”€λ“œλ¦½λ‹ˆλ‹€.


였λ₯˜μ— λŒ€ν•œ 지적은 ν™˜μ˜ν•©λ‹ˆλ‹€.


(λ©”μ†Œλ“œ 이름 κ°œλ–‘κ°™λ‹€, μ˜ˆμ‹œκ°€ μ’†κ°™λ‹€ λ‹€ μ’‹μŠ΅λ‹ˆλ‹€)