๋ฒ„ํ”„์‹œ์Šคํ…œ์„ ๋งŒ๋“ค์—ˆ๋Š”๋ฐ ๋ญ”๊ฐ€ ๋งŒ์กฑ์Šค๋Ÿฌ์›Œ์„œ ์˜ฌ๋ ค๋ณด์•„์š”.
ํ”ผ๋“œ๋ฐฑ ํ™˜์˜

๊ธฐ๋ณธ์ ์œผ๋กœ ์ด ๊ฒŒ์ž„์€ ํ„ด์ œ ๊ฒŒ์ž„ ๊ฐ„๋‹จํžˆ ๋„ˆ ํ•œ๋Œ€ ๋‚˜ ํ•œ๋Œ€๋ผ ์ƒ๊ฐํ•˜์‹œ๋ฉด ๋Œ‘๋‹ˆ๋‹ค


๋งจ ์ฒ˜์Œ์— ๋ฒ„ํ”„ ์‹œ์Šคํ…œ์„ ์ƒ๊ฐ ํ–ˆ์„๋•Œ
ํ™•์žฅ์„ฑ์ด ํฌ๋ฉด ์ข‹๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐ์„ ํ•ด์„œ ๋ฏธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ข€ ์ƒ๊ฐ ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ณต๊ฒฉ์œผ๋กœ ๋””๋ฒ„ํ”„/๋ฒ„ํ”„๋ฅผ ๊ฑด๋‹ค.
๋ชจ๋“  ์œ ๋‹›์—๋Š” ๋ฒ„ํ”„ ์‹œ์Šคํ…œ์ด ์กด์žฌํ•œ๋‹ค.
์ด ๋ฒ„ํ”„ ์‹œ์Šคํ…œ์—๋Š” ๋ฒ„ํ”„๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฆฌ์ŠคํŠธ๊ฐ€ ์กด์žฌํ•œ๋‹ค.
๋งค ํ„ด์ด ์ง€๋‚ ๋•Œ๋งˆ๋‹ค ์ด ๋ฆฌ์ŠคํŠธ๋ฅผ ์ˆœํšŒํ•ด์„œ ๋ฒ„ํ”„๋ฅผ ์ง„ํ–‰์‹œํ‚จ๋‹ค. ex)๋„ํŠธ๋Ž€

๋ฒ„ํ”„ ๋‚ด๋ถ€์—๋Š” ๋ฒ„ํ”„ ๊ธฐ๊ฐ„์ด ์กด์žฌํ•ด์„œ ์ด ๋ฒ„ํ”„ ๊ธฐ๊ฐ„์ด ๋„˜์–ด๊ฐ€๋ฉด ๋ฒ„ํ”„๋Š” ์•Œ์•„์„œ ์‚ฌ๋ผ์ง€๊ณ  ์›๋ž˜ ์ƒํƒœ๋กœ ๋˜๋Œ๋ฆฐ๋‹ค.

๋‹ค๋งŒ ๋˜‘๊ฐ™์€ ๋ฒ„ํ”„๊ฐ€ ๋˜ ๋‹ค์‹œ ๊ฑธ๋ฆด ๊ฒฝ์šฐ์—” ๊ฐฑ์‹ ํ•ฉ๋‹ˆ๋‹ค.

์กฐ๊ธˆ ๋” ์ž์„ธํ•œ ๊ตฌ์กฐ๋Š” ์ด๋ ‡์Šต๋‹ˆ๋‹ค.
๊ณต๊ฒฉ์ž๋Š” ๋ฐฉ์–ด์ž์˜ ๋ฒ„ํ”„ ์‹œ์Šคํ…œ์— ๋ฒ„ํ”„์˜ ์ด๋ฆ„๊ณผ ํ•ด์ œ์‹œ ๋ฐœ๋™ํ•  Action์„ ์ค๋‹ˆ๋‹ค.
๋ฒ„ํ”„ ์‹œ์Šคํ…œ์€ ๋ฐ›์€ ๋ฒ„ํ”„์˜ ์ด๋ฆ„์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฒ„ํ”„๋ฅผ ์ƒ์„ฑํ•ด ๋ฆฌ์ŠคํŠธ์— ๋„ฃ์Šต๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์ผ์ • ํ„ด์ด ์ง€๋‚˜๋ฉด ์‚ฌ๋ผ์ง€๋ฉด์„œ ์•„๊นŒ ๋ฐ›์€ Action์„ ๋ฐœ๋™ํ•ฉ๋‹ˆ๋‹ค.
์ด Action์€ ์›๋ž˜ ์ƒํƒœ๋กœ ๋˜๋Œ๋ฆฌ๊ธฐ ์œ„ํ•œ ํ•จ์ˆ˜ ์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ๋ฒ„ํ”„ ๋‚ด๋ถ€์ž…๋‹ˆ๋‹ค.

public abstract class Buff
{
protected string buffName;
protected int turnCount;
protected int duration;
protected ICommonStat targetStat;
public event Action<string> RemoveBuff;
public event Action OnEndBuff;
public Buff(ICommonStat targetStat, int duration, Action OnEndBuffAction)//์ƒ์„ฑ์ž ๋Œ€์ƒ ์Šคํ…Ÿ์ด๋ž‘ ๋ฒ„ํ”„ ๊ธฐ๊ฐ„์„ ๋ฐ›์•„์˜ด
{
buffName = GetType().Name;
this.targetStat = targetStat;
this.duration = duration;
turnCount = 0;
OnEndBuff += OnEndBuffAction;
OnEnableBuff();
}
public abstract void OnEnableBuff();
public virtual void ProgressFunction()
{
turnCount++;
if (turnCount >= duration)
{
OnDisableBuff();
}
}
public virtual void OnDisableBuff()//๋ฒ„ํ”„ ์ œ๊ฑฐ
{
OnEndBuff?.Invoke();
RemoveBuff?.Invoke(buffName);
}
public void ResetCount()//๋ฒ„ํ”„ ๊ฐฑ์‹ 
{
turnCount = 0;
}
public string ReturnType() {
return buffName;
}
}

์ผ๋‹จ ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด ๊ธฐ๋ณธ์ ์ธ ์ดˆ๊ธฐํ™”์™€ ๋ณ€์ˆ˜ ํ• ๋‹น ๋“ฑ์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๋ฒ„ํ”„ ๋‚ด๋ถ€ ๋กœ์ง์€ ํฌ๊ฒŒ ์ฒซ ํ™œ์„ฑํ™”์‹œ, ๋ฒ„ํ”„ ์ง„ํ–‰, ๋ฒ„ํ”„ ํ•ด์ œ์‹œ
์ด๋ ‡๊ฒŒ 3๊ฐœ๋กœ ๋‚˜๋ˆ„์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

public abstract void OnEnableBuff()
public virtual void ProgressFunction()
public virtual void OnDisableBuff()//๋ฒ„ํ”„ ์ œ๊ฑฐ

์ด 3๊ฐœ์ฃ 

์‹œ์ž‘ ํ• ๋•Œ์™€ ๋๋‚ ๋•Œ๋Š” ๋ณ„ ๋‚ด์šฉ์ด ์—†์Šต๋‹ˆ๋‹ค. ๋ถ€๋ชจ ํด๋ž˜์Šค๋‹ˆ๊น์š”!

๊ทธ๋ฆฌ๊ณ  ๊ฐ€์šด๋ฐ ๋ฒ„ํ”„ ์ง„ํ–‰ ํ•จ์ˆ˜๋Š” ๋‚ด๋ถ€์˜ ๋ฒ„ํ”„ ์นด์šดํŠธ๋ฅผ ์ฆ๊ฐ€์‹œ์ผœ ๋ฒ„ํ”„ ๊ธฐ๊ฐ„์„ ๋„˜์–ด๊ฐ€๋ฉด ๋น„ํ™œ์„ฑํ™” ์‹œํ‚ต๋‹ˆ๋‹ค!


public event Action<string> RemoveBuff;

์ด ์นœ๊ตฌ์˜ ์—ญํ• ์€ ํ•ด์ œํ•  ๋•Œ ์ด๋ฆ„์„ ๋ฐ›์•„์„œ

public void RemoveBuff(string buffName)
{
Buff buffToRemove = buffLists.Find(buff => buff.ReturnType() == buffName);

if (buffToRemove != null)
{
buffLists.Remove(buffToRemove);
Debug.Log($"Buff '{buffName}' End.");
}
else
{
Debug.Log($"Buff '{buffName}' not found.");
}
}

๋ฒ„ํ”„ ์‹œ์Šคํ…œ์— ์žˆ๋Š” ์ด ์นœ๊ตฌ์—์„œ ๋ฆฌ์ŠคํŠธ ํ•ด์ œ๋ฅผ ํ•ด์ค๋‹ˆ๋‹ค.
๋ฒ„ํ”„ ์‹œ์Šคํ…œ์€ ์žˆ๋‹ค๊ฐ€ ๋” ์ž์„ธํ•˜๊ฒŒ ์‚ดํŽด๋ณด์ฃ 

์ด ๋ฒ„ํ”„ ์นœ๊ตฌ๋Š” ์ถ”์ƒํด๋ž˜์Šค์ธ ๊ฒƒ์„ ๋ณด๋ฉด ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด ๊ฐœ๊ฐœ์ธ์˜ ๋ฒ„ํ”„๋“ค์„ ๋งŒ๋“ค๋•Œ ์ƒ์†์šฉ๋„ ์ž…๋‹ˆ๋‹ค.
๊ทธ๋ž˜์„œ ์˜ˆ์‹œ์šฉ ๋ฒ„ํ”„๋ฅผ ํ•˜๋‚˜ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค.
์ด ๋ฒ„ํ”„๋Š” ์ ์—๊ฒŒ ์–ผ์Œ ์ƒํƒœ์ด์ƒ์„ ๊ฑธ์–ด ์Šฌ๋กœ์šฐ ๋””๋ฒ„ํ”„๋ฅผ ๊ฑฐ๋Š” ์นœ๊ตฌ์ž…๋‹ˆ๋‹ค.

public class FrozenDebuff : Buff
{
public FrozenDebuff(ICommonStat targetStat, int maxTurnCount, Action OnEndBuffAction) : base(targetStat, maxTurnCount, OnEndBuffAction)
{
}
public override void OnEnableBuff()
{
targetStat.ReturnStat().Speed.StatValue -= 20;
}
public override void ProgressFunction()
{
}
public override void OnDisableBuff()
{
base.OnDisableBuff();
targetStat.ReturnStat().Speed.StatValue += 20;
}
}


๋ฒ„ํ”„๊ฐ€ ํ™œ์„ฑํ™” ๋  ๋•Œ ์†๋„์Šคํƒฏ์„ ๊ฐ์†Œ์‹œํ‚ค๊ณ  ๋ฒ„ํ”„๊ฐ€ ๋๋‚ ๋•Œ ์†๋„๊ฐ€ ์›๋ž˜๋Œ€๋กœ ๋Œ์•„๊ฐ€๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ„๋‹จํ•˜์ฃ ? ์ด์ œ ์ด ๋””๋ฒ„ํ”„ ๊ฐ™์€ ๊ฒฝ์šฐ์—” ์ง€์† ๋ ๋•Œ ๋ณ€ํ™”๊ฐ€ ์—†๊ธฐ์— ProgressFunction์นœ๊ตฌ ๋‚ด๋ถ€์— ์•„๋ฌด๊ฒƒ๋„ ์—†์ง€๋งŒ
์ง€์†๋”œ์„ ์ฃผ๋Š” ๊ฒฝ์šฐ์—” ์ฒด๋ ฅ์— ํ”ผํ•ด๋ฅผ ์ค€๋‹ค๋˜๊ฐ€ ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€์‹œํ‚ฌ ์ˆ˜๋„ ์žˆ๊ฒ ์ฃ ?

์ด์ œ ๋ฒ„ํ”„ ์‹œ์Šคํ…œ์„ ํ™•์ธํ•ด๋ณด์ฃ 

public class BuffSystem : MonoBehaviour
{
private TurnManager turn;
private List<Buff> buffLists = new();

private void Start()
{
turn = GameObject.Find("TurnManager").GetComponent<TurnManager>();
turn.OnEndRound.AddListener(BuffProgress);
}
public void BuffProgress()//๋ชจ๋“  ๋ฒ„ํ”„ ์ง„ํ–‰
{
for (int i = buffLists.Count - 1; i >= 0; i--)
{
buffLists[i].ProgressFunction();
}
}
public void AddBuff(string buffName, int duration, Action OnEndBuffAction = null)
{
if(buffLists.Find(buff => buff.ReturnType() == buffName) != null)
{
buffLists.Find(buff => buff.ReturnType() == buffName).ResetCount();//๊ฐฑ์‹ 
}
else
{
if (BuffList.buffListDictionary.TryGetValue(buffName, out var buffFactory))//์ถ”๊ฐ€
{
Buff newBuff = buffFactory.Invoke(transform.GetComponent<ICommonStat>(), duration, OnEndBuffAction);
buffLists.Add(newBuff);
newBuff.RemoveBuff += RemoveBuff;
Debug.Log($"Buff '{buffName}' Add.");
}
else
{
Debug.Log($"invalid buff name '{buffName}'");
}
}
}
public void RemoveBuff(string buffName)
{
Buff buffToRemove = buffLists.Find(buff => buff.ReturnType() == buffName);

if (buffToRemove != null)
{
buffLists.Remove(buffToRemove);
Debug.Log($"Buff '{buffName}' End.");
}
else
{
Debug.Log($"Buff '{buffName}' not found.");
}
}
}

์˜ค๋ธŒ์ ํŠธ์— ์ง์ ‘์ ์œผ๋กœ ํ• ๋‹น๋˜๋Š” ๋ฒ„ํ”„ ์‹œ์Šคํ…œ ์ž…๋‹ˆ๋‹น.
๊ธฐ๋Šฅ์€ ๋ฒ„ํ”„ ์ถ”๊ฐ€ ๋ฒ„ํ”„ ์ง„ํ–‰ ๋ฒ„ํ”„ ์ œ๊ฑฐ ์ด๋ ‡๊ฒŒ 3๊ฐœ์ž…๋‹ˆ๋‹ค.
์‚ฌ์‹ค ๋ณ„ ๋‚ด์šฉ์€ ์—†์–ด์š”


RemoveBuff์ด ์นœ๊ตฌ๋Š” ๋ฒ„ํ”„ ๋‚ด๋ถ€์— ์ด๋ฒคํŠธ๋กœ ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค.
๋ฒ„ํ”„ ๋ฆฌ์ŠคํŠธ์—์„œ ์ œ๊ฑฐ๋ฅผ ํ•ด์ฃผ์ฃ 


AddBuff์ด ์นœ๊ตฌ๋Š” ๊ณต๊ฒฉ ์Šคํฌ๋ฆฝํŠธ์—์„œ ํ˜ธ์ถœ ๋ฉ๋‹ˆ๋‹ค.
๊ณต๊ฒฉ ์Šคํฌ๋ฆฝํŠธ์—์„œ ์ด๋ฆ„๊ณผ Action์„ ๊ฑด๋„ค์ฃผ์ฃ 

myBuff.AddBuff("FrozenDebuff", duration, DisableFrozen);

์š”๋ ‡๊ฒŒ์š”

์—ฌ๊ธฐ์„œ ํ•˜๋‚˜ ์˜๋ฌธ์ !
๋ฒ„ํ”„ ์ด๋ฆ„์„ ๋ฐ›์•˜๋Š”๋ฐ ์ด๊ฑธ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฒ„ํ”„๋ฅผ ์ƒ์„ฑํ•˜๋ ค๋ฉด ๊ทธ๋ƒฅ Switch๋ฌธ์„ ์จ์„œ ์ƒ์„ฑํ•˜๋ฉด ๋˜๋Š”๊ฑฐ ์•„๋‹Œ๊ฐ€?
์˜ˆ ํ•˜์ง€๋งŒ ์ €๋Š” ๋ณ‘์ด ์žˆ์Šต๋‹ˆ๋‹ค.
switch๋ฌธ์„ ์“ฐ๋ฉด ์ฃฝ๋Š” ๋ณ‘์ด ์žˆ์–ด์š”
์ค‘๋ณต ์ฝ”๋“œ๋ฅผ ์ฃฝ์–ด๋„ ์“ฐ๊ธฐ ์‹ซ์–ดํ•ด์„œ ๋ฌด์ ๊ถŒ ๋”•์…”๋„ˆ๋ฆฌ๋กœ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค.

๊ทผ๋ฐ ๋ง‰์ƒ ํ•ด๋ณด๋‹ˆ๊นŒ ์•ˆ๋˜๋Š” ๊ฒ๋‹ˆ๋‹ค!
์—๋Ÿฌ๊ฐ€ ๋– ์š”!
์ฒ˜์Œ์—๋Š” ๋ง‰์—ฐํžˆ ํ‚ค๋ฅผ ์ŠคํŠธ๋ง ๊ฐ’์„ ๊ฐœ๋ณ„ ๋ฒ„ํ”„๋กœ ํ•˜๋ฉด ๋  ์ค„ ์•Œ์•˜์–ด์š”

a17d2cad2f1b782a99595a48fa9f3433f728bd6f6b8abd3c665da2f8

๊ทผ๋ฐ ์•ˆ๋ฉ๋‹ˆ๋‹ค.
์ฒœํ•˜์˜ ํ‚น๊ฐ“ ์— ํŽ˜๋Ÿฌ ์ œ๋„ˆ๋Ÿด c#๋„ ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ์ดˆ๊ธฐํ™” ํ• ๋•Œ ์ธ์Šคํ„ด์Šค๊ฐ€ ์•„๋‹Œ ํด๋ž˜์Šค๋ฅผ ๋„ฃ๋Š” ๋ฏธ์นœ์ง“์€ ๋ชปํ•œ๋‹ต๋‹ˆ๋‹ค.
๊ทธ๋ž˜์„œ ์ƒ๊ฐํ–ˆ์ฃ  ์–ด์งœํ”ผ ๋‚˜๋Š” ์ŠคํŠธ๋ง์„ ๋„ฃ์œผ๋ฉด ๊ทธ ์ŠคํŠธ๋ง์— ๋งž๋Š” ํด๋ž˜์Šค๋งŒ ๋ฐ›์œผ๋ฉด ๋˜๋Š”๊ฒƒ์ธ๋ฐ..
๋„ค ์•ˆ๋˜๊ฒ ๋”๋ผ๊ตฌ์š” ์ œ ๋จธ๋ฆฌ๋กœ๋Š”

๊ทธ๋ž˜์„œ ์ง€ํ”ผํ‹ฐ ํ˜•๋‹˜ ๋ฐ”์ง“๊ฐ€๋ž‘์ด ์žก๊ณ  ๋ฌผ์–ด๋ดค๋”๋‹ˆ ๋ฐ”๋กœ ์•Œ๋ ค์ฃผ๋”๋ผ๊ตฌ์š”

public static class BuffList
{
public static Dictionary<string, System.Func<ICommonStat, int, Action, Buff>> buffListDictionary = new()
{
{ "FrozenDebuff", (targetStat, maxTurnCount, OnEndBuffAction) => new FrozenDebuff(targetStat, maxTurnCount, OnEndBuffAction) }
};
}

์ฝ”๋“œ ๋ณด์ž๋งˆ์ž ํƒ„์„ฑ์ด ๋‚˜์™”์Šต๋‹ˆ๋‹ค.
์™€! ์ƒŒ์ฆˆ! ์”จ๋ฐœ! ์„น์Šค!
๋ฐ”๋กœ ์ปดํ“จํ„ฐ ๋“ค๊ณ  ํ•œ๋ฐœ ๋นผ๋Ÿฌ ๊ฐ”์Šต๋‹ˆ๋‹ค.
์–ด๋–ป๊ฒŒ value๊ฐ’์— ์ƒ์„ฑ์ž ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ๋ฅผ ๋„ฃ์„ ์ƒ๊ฐ์„ ํ–ˆ์ง€???

์•„๋ฌดํŠผ ์›ํ•˜๋Š” ๋ชฉ์ ์€ ๋‹ฌ์„ฑ ํ–ˆ์Šต๋‹ˆ๋‹ค.
์ŠคํŠธ๋ง ๊ฐ’์„ ๋„ฃ์–ด์„œ ์ƒ์„ฑ์ž๋ฅผ ์–ป์œผ๋ฉด ๊ทธ ๋ฒ„ํ”„ ํด๋ž˜์Šค๋ฅผ ๋ฆฌ์ŠคํŠธ์— ๋„ฃ์„ ์ˆ˜ ์žˆ์œผ๋‹ˆ๊นŒ์š”
Buff newBuff = buffFactory.Invoke(transform.GetComponent<ICommonStat>(), duration, OnEndBuffAction); ์ด๋ ‡๊ฒŒ ๋ง์ด์ฃ 
์ŠคํŠธ๋ง์„ ๋„ฃ์œผ๋ฉด ๊ทธ์— ๋งž๋Š” ์ƒ์„ฑ์ž๋ฅผ ์–ป์–ด Invokeํ•˜๋ฉด ํด๋ž˜์Šค๋ฅผ ์ค๋‹ˆ๋‹ค.

์‚ฌ์‹ค ์ด๊ฑฐ ๋ณด์—ฌ์ฃผ๋ ค๊ณ  ๊ธ€ ์ป์Šต๋‹ˆ๋‹ค.
c# ์กฐ ์•„

์˜ˆ ์•„๋ฌดํŠผ ์ž˜ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.
๋ฒ„ํ”„ ํ•ด์ œํ• ๋•Œ ๋งจ ์ฒ˜์Œ์— ๋ฒ„ํ”„ ์ˆœํšŒ๋ฅผ foreach๋ฌธ์œผ๋กœ ํ–ˆ๋”๋‹ˆ ์ปฌ๋ ‰์…˜ ์˜ค์—ผ๋˜์„œ ๋ฒ„๊ทธ๊ฐ€ ํ„ฐ์ง€๊ธด ํ–ˆ์ง€๋งŒ
๋’ค๋ถ€ํ„ฐ ํ›‘์–ด์„œ ๊ธˆ๋ฐฉ ๊ณ ์ณค์Šต๋‹ˆ๋‹ค.

์ž์„ธํ•˜๊ฒŒ ์•ˆ๋‹ค๋ฃจ๊ธด ํ–ˆ์ง€๋งŒ ๋งจ ์ฒ˜์Œ์— ๋ฒ„ํ”„ ํ• ๋‹นํ• ๋•Œ ๋ณด๋‚ด์ฃผ๋Š” AddBuff์˜ Action OnEndBuffAction = null๋ธ๋ฆฌ๊ฒŒ์ดํŠธ๋Š” ์Šคํƒฏ ์™ธ์ ์ธ ๋ถ€๋ถ„์—์„œ ํ•ด์ œํ• ๋•Œ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ๋“ค์–ด์„œ ํ™”์ƒ ๋””๋ฒ„ํ”„๋ฅผ ์ค„๋•Œ ์Šคํ”„๋ผ์ดํŠธ๊ฐ€ ๋นจ๊ฐ›๊ฒŒ ๋ณ€ํ–ˆ๋‹ค๋ฉด
ํ•ด์ œํ•  ๋•Œ๋Š” ๋ฒ„ํ”„ ์‹œ์Šคํ…œ ๋‚ด๋ถ€์—์„œ๋Š” ๋ฒ„ํ”„๊ฐ€ ์ฒ˜์Œ ์‹œ์ž‘๋ ๋•Œ ์–ด๋””์„œ ๋ฌด์—‡์ด ๋ณ€ํ–ˆ๋Š”์ง€ ์•Œ์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์—
์ด ์Šคํ”„๋ผ์ดํŠธ๋ฅผ ์›๋ž˜๋Œ€๋กœ ๋Œ๋ ค์ฃผ๋Š” ํ•จ์ˆ˜๋ฅผ ๋‹ด์•„์„œ ๋ณด๋‚ด์ค๋‹ˆ๋‹ค.

๋