๊ฐค ์ญ ๋ณด๋๊น ์ค๋ ฅ ์๋ ์ฌ๋๋ ๋ง์ง๋ง ์
๋ฌธํ๋ ์ฌ๋๋ค๋ ๋ง์ ๊ฒ ๊ฐ๋๋ผ๊ณ
๊ทธ๋์ ๋ด์ผ ์ถ๊ทผ๋ ์ ํ๊ฒ ๋ค,ย ๋ด๋น๋ค์๊ฒย ๋์ ๋ ๋งํ ๊ธ ํ๋ ์ธ๊ณ ๊ฐ.
๋๋ ์ข์ ํ๋ก๊ทธ๋๋จธ๊ณ ํ๋ก์ ํธ ์ ๋ฐ ์ต์ ํ, ๊ด๋ฆฌ ์
๋ฌด ๋ด๋นํ๊ณ ์์.
์์งํ ๊ฐ๊ด์ ์ผ๋ก ๋๊ตด ๊ฐ๋ฅด์น ์ ๋๋ก ์ ํ๋ค๊ณ ๋ ๋ชปํ๊ฒ ๋๋ฐย
์ ์งค๋ฆฌ๊ณ ๋ถ์ด ์๋๊ฑฐ ๋ณด๋ฉด ์ต์์ปท์ ๋๋ค๋ ๊ฑฐ๊ฒ ์ง
์จ๋ ๋ณธ๋ก ์ผ๋ก ๋ค์ด๊ฐ๋ฉด,
์ต์ ํ๋ ๊ธฐ๋ณธ์ ์ผ๋กย ์ฝ๋ ๋ก์ง๋ถํฐ ํด์ ๋ฆฌ์์ค(์ฌ์ด๋, ํ ์ค์ณ, ๋ชจ๋ธ๋ง ๋ฑ๋ฑ)๊น์ง ๊ต์ฅํ ๊ด๋ฒ์ํ๊ฒ ์ ์ฉ๋์ด์ผ ํจ.
๋ ์ฑ๋ฅ๊ณผ ํ๋ฆฌํฐ๋ฅผ ์ ์ ํ ํํํ๋ ์ํฉ์ด๋, ์ฑ๋ฅ์ด ๋จ์ด์ง๋๋ผ๋ ๊ฐ์ํ๊ณ ๋์ด๊ฐ์ผ ํ ๋ถ๋ถ์ ํ๋จํ๋ ๊ฒ ๋ฑ๋ฑ..ย
๋จ์ํ ์ง์ ๋ฟ๋ง ์๋๋ผ ๊ฒฝํ์ด ํ์ํ ๊ฒฝ์ฐ๊ฐ ๋ง์.ย ๋ ์ด๋ฐ ๊ฒ๋ค์ ๊ธ ํ๋๋ก ๋ค ์ ๋ฆฌํ ์ ์๋ ๊ฒ๋ ์๋๊ธฐ๋ ํ๊ณ ..
๊ธฐ๋ณธ์ ์ด๋ฉด์๋ ๋๊ตฌ๋ย ์ฝ๊ฒ ๊ตฌ์กฐ ๋ณ๊ฒฝ ์์ด ์งํ ์ค์ธ ํ๋ก์ ํธ์๋ ๋ฐ๋ก ์ ์ฉํ ์ ์๊ณ , ํจ๊ณผ๋ฅผ ๋ณผ ์ ์๋ ๋ด์ฉ์ ์จ๋ณผ๊น ํจ.
์ด ๊ธ์์ ์ค๋ช ํ ๋ด์ฉ์ ํ๊ณผ ์คํ, ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ๋ํ ์ต์ํ์ ์ดํด๋ฅผ ๋ฐํ์ผ๋ก ํ ์ธ์ฌ์ดํธ ํ์ฅ์.
์ฌ์ค ๊ต์ฅํ ๊ธฐ๋ณธ์ ์ธ ๋ด์ฉ์ธ๋ฐ, ์ ์ ์์ค ํ๋ก๊ทธ๋๋จธ์ ์ผํ ๋ ์ด๋ฌํ ๋ด์ฉ์ ์์ ๋ชจ๋ฅด๋ ๊ฒฝ์ฐ๋ ํ๋คํจ.
์ฌ์ด ๋ด์ฉ์ด๊ธด ํ์ง๋ง C#์ ๋ํ ์ต์ํ์ ์ง์์ ๊ฐ๊ณ ์์ด์ผ ์์ ๋จน์ ์ ์์ ๊ฒ์.
์ ๋ํฐ๋ฅผ ๊ตด๋ฆฌ๋ค ๋ณด๋ฉด ๊ฐ๋น์ง๋ฅผ ์ต์ํ ํด์ผํ๋ค,ย ๊ฐ๋น์ง๊ฐ ํ๋ ์ ๋๋์ ์ํ์ด๋คย ์ด๋ฐ ๋ง๋ค์ ๋ง์ด ๋ค์ ์ ์์.
์์ฐํ ๊ทธ๋ผ ์ด๋ป๊ฒ ํด์ผ ์ด๋ฌํ ๊ฐ๋น์ง๋ฅผ ์ต์ํ ํ ์ ์๋๋ฐ? ๋ผ๋ ์๋ฌธ์ ๊ฐ๊ฒ ๋จ.
๊ทธ ๋ต์ ์ป๊ธฐ ์ํด์ ์ผ๋จ ๊ฐ๋น์ง๊ฐ ๋ฌด์์ธ์ง, ์ธ์ ์๊ธฐ๋ ๊ฒ์ธ์ง ์ ํ์๊ฐ ์์.
๊ธฐ๋ณธ์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ์ ๊ตฌ์กฐ์ ๋ํด ์๊ณ ์์ผ๋ฉด ์ข์.
OS ๊ด๋ จํด์ ๊ณต๋ถํ๋ค๋ฉด ๋ณธ ๊ธฐ์ต์ด ์์ ๊ฒ์.ย ์์ธํ ๋ด์ฉ์ ์์์๋ค ๊ณต๋ถํ๊ณ
์ด ๊ธ์ ๋ด์ฉ์ ์ดํดํ๊ณ ์จ๋จน๊ธฐ ์ํด์๋ ๊ทธ๋ฅ ํ, ์คํ ๋ ๊ฐ๋ง ๊ธฐ์ตํด๋๋ฉด ๋จ.ย
๋น์ฐํ ๋์ค์ ๋ฐ๋ก ๊ณต๋ถํด์ ๋ค ์๊ณ ์์ผ๋ฉด ํจ์ฌ ์ข๋ค.
๊ฐ๋น์ง๋ ํย ์์ญ์ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ ์ค ๋ ํผ๋ฐ์ค(์ฐธ์กฐ)๋ฅผ ์์ ๋ฉ๋ชจ๋ฆฌ๋ค์ ๋งํจ.
์ฆ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด ํ ๋น๋์์ง๋ง ๋ ํผ๋ฐ์ค๋ฅผ ๋ชจ๋ ์์๊ธฐ ๋๋ฌธ์, ๋ ์ด์ ๊ทธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ฌ์ฉํ ์ ์๋ ์ํ๊ฐ ๋ ๊ฒ์.
C#์์๋ ์ด๋ ๊ฒ ์ฌ์ฉํ ์ ์๊ฒ ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๊ฐ๋น์ง๋ผ๊ณ ์นญํ๊ณ , ๊ฐ๋น์ง ์ปฌ๋ ์ ์ด๋ผ๋ ์์ ์ ์ํํด์ ์ฌ์ฉํ์ง ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ ๋ฆฌํจ.
์ด ๊ณผ์ ์์ ๊ฝค ๋ง์ ๋น์ฉ์ด ๋ค๊ธฐ ๋๋ฌธ์ ํ๋ ์ ๋๋์ด ๋ฐ์ํ๊ฒ ๋๋ ๊ฒ์.
๋ค์ ์ ๋ฆฌํ๋ฉด ํ์ ํ ๋น๋ ์ ๋ค ์ค ๋ชป์ฐ๋ ์ ๋ค์ ๊ฐ๋น์ง๋ผ ํจ.
์ฆ, ํ์ ํ ๋น๋์ง ์๋ ์ ๋ค์ ๊ฐ๋น์ง๊ฐ ์๋๊ณ , ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ๋์์ด ์๋.
๋ฐ๋ผ์ ํ์ ํ ๋น๋๋ ์ ๋ค๋ง ์ ๊ฒฝ ์ฐ๋ฉด ๋๊ณ , ์๋ค๊ฐ ๋ ํผ๋ฐ์ค๋ฅผ ์์ง๋ง ์์ผ๋ฉดย ๊ฐ๋น์ง๋ ์ ๋ ์๊ธฐ์ง ์๋๋ค๋ ๊ฒ์.
์ด ์ ๋๋ง ์๊ณ ์์ด๋ ๊ฐ๋น์ง๋ก ์ธํ ์ฑ๋ฅ ์ ํ๋ฅผ ํฌ๊ฒ ์ค์ผ ์ ์์.
์ฌ์ค ์ ๋๋ก ์ค๋ช ํ๋ ค๋ฉด ๊ธธ๊ณ ๋ณต์กํด์ง์ง๋งย ๊ทธ๋ฅ ๋ฑ ์ด๊ฑฐ๋ง ์๋ฉด ๋จ.
'class๋ฅผ ์์ฑํ๋ฉด ํ์ ํ ๋น ๋๋ค.'
ํ์ด ๋ญ์ง, ์ด๋ป๊ฒ ๊ตด๋ฌ๊ฐ๋์ง ์ฌ์ค ๋น์ฅ ์ ํ์๋ย ์๋ค.
์ด๊ฒ๋ง ์๊ณ ๊ฐ์. class๋ ์ด๋์์ ์์ฑํ๋ ํ์๋ค ๋๋ ค ๋ฐ๊ณ ์์ํ๋ค.
๋ค์ ์ฝ๋๋ฅผ ๋ณด์.
void Update(){
var tList = new List<int>();
tList.AddRange(otherList);
foreach(var a in tList)
{
//~~
}
}
์ ์ฝ๋๊ฐ ์ ์ ๋ค์ด ๋ง์ด ์ค์ํ๋ ๋ํ ์์์.
์ Update๊ฐ for-loop๊ฐ ๋ ์๋ ์๊ณ ํ๋ ์๋ง๋ค ํธ์ถํ๋ ์ด๋ค ๋ค๋ฅธ method๊ฐ ๋ ์๋ ์๊ณ ..
์์ ์ค๋ช ํ๋ฏ class๋ ํ์ ํ ๋น๋๋ค.
List๋ C#์์ ์ ๊ณตํ๋ ์๋ฃ๊ตฌ์กฐ์ด์ ์ฌ๋ฌ ์ธํฐํ์ด์ค๋ฅผ ์์ํ๊ณ ์๋ class์ด๊ณ ย
๋ณ์ tList์ ์๋ช ์ย ์ ์ธ ์ดํ Update ๋ฃจํ ํ ๋ฒ์ด ๋๋ ๋๊น์ง์.
์ฆ ์ Update ๋ฃจํ๊ฐ ๋๋๋ฉด tList๋ ์๋ช ์ด ๋๋๊ฒ ๋๊ณ List์ ๋ ํผ๋ฐ์ค๊ฐ ํด์ ๋๋ค.
๋ฆฌ์คํธ๊ฐ ํ ๋น ๋ฐ์ ํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๊ฐ๋ฆฌํค๋ ๋ณ์๊ฐ ์ฌ๋ผ์ง๊ฒ ๋๊ณ ย ์์ฐ์ค๋ฝ๊ฒ ๊ฐ๋น์ง๊ฐ ๋๋ค.
๋ฌธ์ ๋ Update๋ ์ ๋ํฐ์์ ํ๋ ์๋ง๋ค ํธ์ถํ๋ event method๋ผ๋ ๊ฒ์ด๊ณ ,ย ์ ์ฝ๋๋ ํ๋ ์๋ง๋ค ๊ฐ๋น์ง๋ฅผ ์์๋ด๋ ์ฝ๋๋ผ๋ ๋ง์ด ๋๋ค.
๊ทธ๋ผ ์ด๋ป๊ฒ ๊ณ ์น ์ ์์๊น?
private List<int> tList = new List<int>();void Update()
{
tList.Clear();
tList.AddRange(otherList);
foreach(var a in tList)
{
//~~
}
}
์ด๋ ๊ฒ๋ง ๊ณ ์ณ๋ ๋ฆฌ์คํธ์ ๋ ํผ๋ฐ์ค๊ฐ ํด์ ๋๋ฉด์ ๊ฐ๋น์ง๊ฐ ์๊ธธ ์ผ์ ์์ด์ง๋ค.
Update์์ class๋ฅผ ์์ฑํ๊ณ ์์ง๋ ์๊ณ ย ๋ณ์์ ์๋ช ๋ํ Update ๋ฃจํ์๋ ๋ฌด๊ดํ๊ธฐ ๋๋ฌธ์.
์บ์ฑ์ ๋ํด์ ๋ ๋ฒ์งธ ์์์์ ๊ฐ๋จํ ์ค๋ช
ํ๊ฒ ์ง๋ง ์บ์ฑ์ ํ ์์๋ผ๊ณ ํ ์ ์๋ค.
์์๊ฐ ๊ต์ฅํ ์ด๋ณด์ ์ด๊ณ ์ง๊ด์ ์ด์ด์ ์ฝ๊ฒ ํ์ ํ ์ ์์ ๊ฒ์.
์ถ๊ฐ๋ก, ์ด ์์๋ง ๋ณด๊ณ ์บ์ฑ ํ๊ณ , Clear๋ฅผ ์ฌ์ฉํ๋ฉด ์์ ํ๋คย ์๊ฐํ๋ฉด ์๋๋ค.
๋ง์ฝ List์ ๋ฉค๋ฒ๊ฐ class๊ณ , ๋ฉค๋ฒ๋ค์ ๋ ํผ๋ฐ์ค๋ฅผ ๊ฐ์ง๊ณ ์๋ ๊ฐ์ฒด๊ฐย ํด๋น ๋ฆฌ์คํธ๊ฐ ์ ์ผํ๋ค๋ฉด Clear์ ๋๋์ ๊ฐ๋น์ง๋ฅผ ์์๋ด๊ฒ ๋ ๊ฒ์.
๋ฌผ๋ก ์ ์ฝ๋์์ AddRange๋ฅผ ์ฐ๊ณ ์๋ ๊ฒ์ผ๋ก ๋ณด์ ๋ค๋ฅธ ์๋ฃ๊ตฌ์กฐ์ class๊ฐ ์์ด์ ํญ์ ์์ ํ๊ธด ํ์ง๋ง, ๋ค๋ฅธ ๊ฒฝ์ฐ์๋ ์กฐ์ฌํด์ผ ํ๋ค.
๋ ๋ฒ์งธ ์์์
private IEnumerator CoTest(){
yield return new WaitForSeconds(0.5f);
}
์ ์ฝ๋์์๋ ๊ฐ๋น์ง๊ฐ ๋ฐ์ํ๋ค.
์๋์์ ๋ณผ ์ ์๋ฏ, WaitForSeconds๊ฐ class์ด๊ธฐ ๋๋ฌธ์.
public sealed class WaitForSeconds : YieldInstruction
{
internal float m_Seconds;
/// <summary>
/// <para>Suspends the coroutine execution for the given amount of seconds using scaled time.</para>
/// </summary>
/// <param name="seconds">Delay execution by the amount of time in seconds.</param>
public WaitForSeconds(float seconds) => this.m_Seconds = seconds;
}
๊ฐ์ฒด๋ฅผ ์์ฑํ์ง๋ง ๊ฐ๋ฆฌํค๋ ๋ณ์๊ฐ ์๊ณ
์ฝ๋ฃจํด์์ WaitForSeconds์ ์ญํ ์ด ๋๋๋ฉด ๋ฐ๋ก ๊ฐ๋น์ง๋ก ์กํ์ GC์ ๋์์ด ๋๋ ๊ฒ.
์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด '์บ์ฑ'์ด๋ผ๋ ์๋จ์ ๋ง์ด ์ฌ์ฉํ๋ค.
ํด๋์ค ๋ด๋ถ ํน์ ์ ์ญ์ผ๋ก ๋ณ์๋ฅผ ๋ง๋ค์ด ๋๊ณ ๊ฑฐ๊ธฐ๋ค๊ฐ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋๊ฑฐ์ง.
๊ทธ๋ ๊ฒ ํ๋ฉด ํด๋์ค๊ฐ ์๋ช ์ด ๋คํ๊ฑฐ๋ ์ ์ญ ๋ณ์๋ผ๋ฉด ํ๋ก๊ทธ๋จ์ด ์ข ๋ฃ๋ ๋ ๊น์ง ๋ ํผ๋ฐ์ค๊ฐ ์กํ์๊ธฐ ๋๋ฌธ์ ๊ฐ๋น์ง๊ฐ ๋์ง ์๋๋ค.
private readonly WaitForSeconds wait0Dot5 = new WaitForSeconds(0.5f);private IEnumerator CoTest()
{
yield return wait0Dot5;
}
๊ฐ๋จํ๊ฒ๋ ์ด๋ฐ ์์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
์ฝ๋ฃจํด์์ ๋จ์ํ ์ผ์ ์๊ฐ ๋ฉ์ถ๋ ๊ธฐ๋ฅ์ผ๋ก ์ฌ์ฉ๋๋ค ๋ณด๋,ย
class์์ ์ธ์งํ์ง ๋ชปํ๊ณ ย ๋์น ์ ์๋ ๋ถ๋ถ์ด๊ณ ์บ์ฑ์ ๊ฐ๋จํ๊ฒ ์ค๋ช ํ๊ธฐ ์ํด ๊ฐ์ ธ์จ ์์์.
์ธ๋ฒ์งธ๋ StartCoroutine์ด๋ค.
StartCoroutine์๋ ๊ฐ๋น์ง๊ฐ ๋ฐ์ํ๋ค.
/// <summary>/// <para>Starts a Coroutine.</para>
/// </summary>
/// <param name="routine"></param>
public Coroutine StartCoroutine(IEnumerator routine)
{
if (routine == null)
throw new NullReferenceException("routine is null");
if (!MonoBehaviour.IsObjectMonoBehaviour((Object) this))
throw new ArgumentException("Coroutines can only be stopped on a MonoBehaviour");
return this.StartCoroutineManaged2(routine);
}
์์์ ๋ณผ ์ ์๋ฏ StartCoroutine์ Coroutine์ด๋ผ๋ class๋ฅผ ๋ฑ์ด๋ธ๋ค.
๋น์ฐํ ๋ฆฌํด๋ Coroutine์ ๋ณ์๋ก ์ฐธ์กฐํ๊ณ ์์ง ์๋ค๋ฉด ๊ฐ๋น์ง๋ก ์กํ๊ฒ ๋ ๊ฒ์.
๊ทผ๋ฐ ์ฌ์ค StartCoroutine๊ฐ์ ๊ฒฝ์ฐ๋ ๊ทธ๋ฅ ๊ฐ๋น์ง๋ฅผ ๊ฐ์ํ๊ณ ์ฐ๋ ๊ฒฝ์ฐ๊ฐ ํจ์ฌ ๋ง๋ค.
์๋ฌด ์๊ฐ ์์ด ์ฌ์ฉํ๋ ํจ์๋ค์ด(ํนํ ์ธ๋ถ ํ๋ฌ๊ทธ์ธ ๋๋ ์ ๋ํฐ api)ย ํ์ ํ ๋น๋๋ ์ ๋ค์ ์์ฑํด์ ๋ฑ์ด๋ด๋ ๊ฒฝ์ฐ๋ ์๋ค๋ ๊ฒ์ ์ค๋ช ํ๊ณ ์ถ์์.
๋ช ๊ฐ์ง ์์๋ฅผ ๋ค์๋๋ฐ ์ถฉ๋ถํ ์ ์ค๋ช ์ด ๋๋์ง ๋ชจ๋ฅด๊ฒ ๋ค.
์ฌ๊ธฐ์ ์ถ๊ฐ๋ก ๊ฐ๋น์ง๋ฅผ ์์ฑํ๋ ์ฝ๋๋ค์ด ์์ฃผ ์คํ๋์ง ์๋๋ก ํ๋ ๊ฒ ์ ๋๋ฅผ ๊ธฐ์ตํ๋ฉด ๋ ๊ฒ ๊ฐ๋ค.
์์๋ค ์ธ์๋ string ์ด๋ย ๋ด๋ถ์ ์ผ๋ก ์์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ method๋ค ๋ฑ๋ฑ.. ์ ๊ฒฝ ์ธ๊ฒ ๋ง๊ธด ํ๋ฐ,
๊ฒฐ๊ตญ 'ํ์ ํ ๋น๋ย ๋ฉ๋ชจ๋ฆฌ์ ๋ํ ๋ ํผ๋ฐ์ค๊ฐ ์์ด์ก๊ธฐ ๋๋ฌธ์ ๊ฐ๋น์ง๊ฐ ๋ฐ์ํ๋ค.'๋กย ๋ชจ๋ ์ํฉ์ ์ค๋ช ํ ์ ์๋ค.
์ฆ ๊ฐ๋น์ง๋ฅผ ๊ด๋ฆฌํ๋ค๋ ๊ฒ์ย ๋ชจ๋ ๊ฐ์ฒด(class)๋ฅผ ํ๋ก๊ทธ๋๋จธ์ ํต์ (๋ณ์)ํ์ ๋๋ ํ์์ธ๋ฐ
๊ทธ ์์์ด ๋ฐ๋ก '๊ฐ๋น์ง๋ ํ์ ํ ๋น๋ ์ ๋ค ์ค์ ๋ฏธ์๊ฐ ๋ ์ ๋ค์ ๋งํ๋ค.',ย 'class๋ฅผ ์์ฑํ๋ฉด ํ์ ํ ๋น ๋๋ค.'๋ฅผย ๋จธ๋ฆฌํต์ ๋๋ ค ๋ฐ์ ๋๋ ๊ฒ์.
์ฝ๋๋ฅผ ์น๋ค๊ฐ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋๋ฐย 'class๋ฅผ ์์ฑํ๋ฉด ํ์ ํ ๋น ๋๋ค.'๋ ์ฌ์ค์ด ๋จธ๋ฆฌํต์ ์๋ค๋ฉด
์์ฐ์ค๋ฝ๊ฒ ํจ์๊ฐ ์ผ๋ง๋ ํธ์ถ๋๋์ง, ๊ฐ์ฒด๋ฅผ ์ฌ๊ธฐ์ ์์ฑํ ํ์๊ฐ ์๋์ง,ย ์บ์ฑ์ ํ๋ ๊ฒ ๋ ๋์์ง, ๊ทธ๋ฅ ๊ฐ๋น์ง๋ฅผ ๊ฐ์ํ๋ ๊ฒ ๋์์ง ๋ฑ๋ฑ์ ๊ณ ๋ คํ๊ฒ ๋ ๊ฒ์.
๋ฌผ๋ก ์ฌ๋ฌ ์ํฉ์ ๊ณ ๋ คํ๊ฒ ๋์๋ค๊ณ ํด์ ์ ๋ต์ ๋ด๋ฆด ์ ์๋ ๊ฑด ์๋๋ค. ์ ์ด์ ์ ๋ต์ด ์๊ธฐ๋ ํ๊ณ .ย
๊ทธ๊ฑด ๊ฒฝํ์ด ํด๊ฒฐํด ์ค ์ผ์.
์ฌ์ค ์ด๋ ์ธ์ด๋ฅผ ํ๋ , ์ด๋ ์์ง์ ์ฐ๋ ๊ธฐ๋ณธ ์ค์ ๊ธฐ๋ณธ์ธ ๋ด์ฉ์ธ๋ฐย ์ ๋ํฐ ์์ฒด๊ฐ ์๋ ์ฝ๋ค ๋ณด๋ ๊ทธ๋ฅ ๋ฌด์์ ๋ค์ด๋ฐ๋ ๊ฒฝ์ฐ๋ ๋ง๊ณ
C#์ด managed memory๋ผ ํ๋ก๊ทธ๋๋จธ๊ฐ ๊ทธ๋ฅ ํ์ ์ฐ๋ ๊ธฐํต์ฒ๋ผ ์จ๋ย ์์์ ์ ๋ฆฌํด์ค์ ๋ชจ๋ฅด๊ณ ๋์ด๊ฐ๋ ์ฌ๋๋ค์ด ๋ง์ ๊ฒ ๊ฐ๊ธฐ๋ ํจ.
๊ฐ๋น์ง ์ต์ ํ ์ ๋ต์ ์ด ๊ธ์ ์์ฑ๋ ๋ด์ฉ์ด ํฐ ๋ถ๋ถ์ ์ฐจ์งํ๊ธด ํ์ง๋ง, ์ ๋ถ๋ ์๋
๊ฒฝ์ฐ์ ๋ฐ๋ผ ๊ฐ๋น์ง๋ฅผ ๊ฐ์ํ๊ณ ํ๋ก๊ทธ๋๋จธ ์๋ ํ์ GC๋ฅผ ๋ฐ์ ์์ผ์ ์ค์ํ ์์ ์ ํ๋ ์ ๋๋์ ๋ง์ ์๋ ์๊ณ
๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋ผ๊ธฐ ์ํด ๊ฐ๋น์ง๋ฅผย ๊ทธ๋ฅ ๊ฐ์ํ๋ ๊ฒฝ์ฐ๋ ์๋ค.
์ด๋ฐ ๊ฑด ๋ญ ๊ฒฝํ์ด ์์ด๋ฉด ์์์ ํ๋จํ๊ฒ ๋ ๋ด์ฉ๋ค์ด๋ผ ์ ์ผ์.
์ข๋ ์๋๋ฐ ์ธ๋ฐ์์ด ๊ธธ๊ฒ ์ด ๊ฒ ๊ฐ๋ค. ์ด์ฌํ ๊ฐ๋ฐํ๋๋ก ํ์
*์ ๊ณต ์ง์์ด ํ์ํ ๋ด์ฉ์ ์ต๋ํ ๋นผ๊ณ ์ฐ๋๋ผ ์ข ์ด๊ธ๋๊ฑฐ๋ ์ผ๋ฐ์ ์ผ๋ก ์๊ธฐํ๋ ๊ฒ๊ณผ ๋ค๋ฅธ ๋ด์ฉ์ด ์์ ์ ์์.
*์ถ๊ฐ๋ก ๊ธ์ ์ฐ์ธ ์ฉ์ด๊ฐ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ ๋ง์ด ์๋ ์๋ ์๋ค. ๊ทผ๋ฐ ๋์ถฉ ์ด๋ ๊ฒ ๋งํ๋ฉด ๋ค ์์๋ฃ๋๋ผ๊ณ
ํด๋น ๋๊ธ์ ์ญ์ ๋์์ต๋๋ค.
๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ๋์ด๋๋ ๊ฑด ๋ง๊ณ ๊ฐ๋น์ง๋ฅผ ์ ๊ฒ ์ ์งํ๋ค -> GC ๋น๋ ์๊ฐ ์ค์ด๋ ๋ค -> GC ๋น์ฉ ๊ฐ์
์ฐ๊ณ ์๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ง์ผ๋ฉด scan time์ด ๋์ด๋๋ ๊ฑด ๋ง๋๋ฐ ๊ทธ๊ฒ ์ ๋๋ก ์ ์ฐ๊ณ ์๋ ๋ฉ๋ชจ๋ฆฌ๋ผ๋ฉด ๋น์ฐํ ๊ฐ์ํด์ผ ํ ๋ถ๋ถ์ด๊ณ ์ธ๋ฐ์์ด ๊ฐ๋น์ง ์ ๋ง๋ค๊ฒ ๋ค๊ณ ๋ ํผ๋ฐ์ค๋ฅผ ์ฅ๊ณ ์๋ ์ํฉ์ด๋ฉด ๋ ๋ง์ด ๋ง์
.net gc๋ ์ ๋ํฐ gc๋ ์ฝ๊ฐ ๋ค๋ฅธ ์ ๋ ์๊ธด ํ๋ฐ ๋ ๋ค generation ๊ธฐ๋ฐ์ผ๋ก ๊ด๋ฆฌํ๋ ๊ฒ์ผ๋ก ์๊ณ ์์. ๊ฐ๋น์ง ์ค์บ์์ ์ด์๋จ์ ์ ๋ค์ ๋ค์ ์ค์บ์์ ๋บ๋ค๋ ์ง ํ๋ ๋ฐฉ์์ผ๋ก ๋์ํจ. ๊ทธ๋ฌ๋ค๋ณด๋ ์ฌ์ค ์ธ๋ ๊ท๋ชจ์์๋ scan ํ์์ผ๋ก ๋ฌธ์ ๋ฅผ ๊ฒช์ ์ผ์ ๊ฑฐ์ ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํจ
์ฐ ๋ด๋น๋ก์ ์ด๊ฑด ๊ฐ์ถ๋ฐ๊ณ ๊ฐ์ผํ๋ค. ๊ฐ์จํฉ๋๋ค. ๋ํ
ํด๋น ๋๊ธ์ ์ญ์ ๋์์ต๋๋ค.
๊ด์ ์ฐจ์ด์ ๊ฐ๋น์ง๋ฅผ ๋ง๋ค์ง ์์ผ๋ ค๋ฉด ๋ ํผ๋ฐ์ค๋ฅผ ์ก๊ณ ์์ด์ผํ๊ณ , ๊ทธ๋ฌ๋ฉด ์ฌ์ฉํ์ง ์์ ๋๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์ ํ๊ฒ ๋๊ฒ ์ง. ์์ฐ๋ ๋์์๋ ์ด๊ฑธ '๋ญ๋น'๋ผ๊ณ ์๊ฐํ ์ ์์. ๊ฐ๋น์ง๋ ์ ๋ฆฌ๋๊ธฐ ์ ๊น์ง๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋จน๊ธด ํ์ง๋ง, GC๊ฐ ์ํ๋ ์ดํ์๋ ๋น ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋๊ธฐ ๋๋ฌธ์ ์ฌ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์๊ธฐ๋ ๊ฒ์.
์ข ๋ ํ์ดํธํ๊ฒ ๊ด๋ฆฌํ๋ ค๋ฉด Dispose ํจํด์ ์ฌ์ฉํ๋๋ฐ, ๋ ๊ทธ๋ ๊ฒ ๊น์ง ๊ฑฐ์ ์ํ๋ ํธ์
์ ๋ฐ์ด๋ฐ๊ฑฐ ์ ๊ฒฝ์ฐ์ง๋ง๊ณ ๊ฒ์ด๋๋ง๋ค์ด ๋ณ์ ๋ค์
๋๊ฐ ๋ญ๋ฐ ์ข๋ฐฅ์ใ ใ ใ - dc App
ํฉํธ: ์ฒซ๋ฒ์งธ ์ฌ์ง์ c# ์๋์ผ๋ก ์คํ์ผ๋ก ํ ๋นํจ