๊ฐ์ด ์ผํ๋ ๋์ด ListA = ListB๋ก ํด๋๊ณ ListA๋ฅผ Clearํจ
ListB๋ ListA์ ๊ฐ์ ์ฐธ์กฐํ๊ฒ ์๋ List์์ฒด๋ง ์ฐธ์กฐํด๋ฒ๋ฆผ
ListA๋ฅผ Clearํ๋ ListA์ ์๋๊ฒ(์๋ธ๋ผ์นดํ๋ธ๋ผ)๋ค์ ๋ถ๋จ๊ณ ์๋ฌด๋ ์ฐธ์กฐ์ํจ
๊ฒฐ๊ตญ ์๋ธ๋ผ์นดํ๋ธ๋ผ๋ GC์ ๋จน์ด๊ฐ ๋์๋ค๋๊ฑฐ์ง?
์ค๋์ ๊ถ๊ธํ๊ฒ ์์ด์ ๋ ํผ๋ฐ์ค ์นด์ดํ ์ ํ๋ ์ธ์ด๋ฉด ListB = ListA ํ์๋ ์นด์ดํ ์ด ์ฆ๊ฐํด์ ListA๋ฅผ ํด๋ฆฌ์ดํด๋ ListB๊ฐ ์ฐธ์กฐํ๊ณ ์๋ ๊ฐ์ฒด๋ ์์ง์์ง์ง ์์์?
๋ C#๊ธฐ์ค์ด๋ผ ๋ค๋ฅธ ์ธ์ด๋ ์ ๋ชจ๋ฅด๊ฒ ์์
ํ์ด์ฌ์ ์๋ง ๊ทธ๋ด์๋ ์์ ์์ธํ๋ ๋ชจ๋ฅด์ง๋ง
์ C#์์๋ ๋ฆฌ์คํธ๊ฐ ๊ฐ์ฒด๊ฐ ์๋๊ณ C์ฒ๋ผ ํฌ์ธํฐ์ธ๊ฑด๊ฐ? C#์ ๊ณต๋ถ๋ฅผ ์ํด์๋ฆฌ ใ ใ
c#์ ๋ชจ๋ ํด๋์ค๋ ๋ ํผ๋ฐ์ค์. ๊ทธ์ธ ๊ตฌ์กฐ์ฒด ๋ฑ์ ๊ฐ, ์ฌ์ค int๋ ๊ตฌ์กฐ์ฒด์ c#์์
ใ ใ ๋ด๊ฐ ํ๊ณ ํ ๋ง์ด ๊ทธ๊ฑฐ๊ณ , ๋ ๋จ์ง ์ฉ์ด(์ฐธ์กฐ/๋ ํผ๋ฐ์ค/์๋ก์นดํผ/๋ฉ๋ชจ๋ฆฌ๊ณต์ )๋ฅผ ์ ๋ฆฌํ๋ ค๋ ์ทจ์ง์ ์ฌ๋ฆฐ๊ฑฐ ๋ฟ์ด์ผ. ์ด ๊ธ๋ ListB๋ ListA์ ๊ฐ์ ์ฐธ์กฐํ๊ฒ ์๋ List์์ฒด๋ง ์ฐธ์กฐํด๋ฒ๋ฆผ << ์ด๊ฒ๋ ๊ฐ์ ์ฐธ์กฐํ๋ค, list์์ฒด๋ฅผ ์ฐธ์กฐํ๋ค ์ด๊ฒ๋ '์ฐธ์กฐ'๋ผ๋ ์ฉ์ด๊ฐ ์ฐ์ด๋ ๊ฐ์ ๋ง์ด์ผ ์ธ์ด์์ ์ฐธ์กฐ(reference)๋ ๊ฐ์ ๋ณต์ฌ, ํน์ ๋๊ธธ๋ ์ฐ๋ ์ฉ์ด๊ฐ ์๋
List A์ ํด๋ฆฌ์ด๊ฐ ๊ณง List B์ ํด๋ฆฌ์ด์ธ๋ฐ ์๋ ์๋๋ List B๊ฐ ๋ณํํ์ง ์๊ธธ ์ํ๋๊ฒ ๊ฐ์. ๊ทธ ์ ์ ์ด๋ผ๋ ์ฌ๋์ ๋ฐธ๋ฅ ๋ ํผ๋ฐ์ค์ ๋ํ ์ดํด๊ฐ ์์ด์ ๊ทธ๋ฐ์์ผ๋ก ํด๋์๊ฑฐ๊ณ
ListA์ ํด๋ฆฌ์ด๊ฐ ์ ListB์ ํด๋ฆฌ์ด๋ ์๋๋ผ๊ณ ๊ทธ๊ฒ ์ ์ด์ ๋ณต์ฌ๊ฐ ์๋๊ฑฐ๋ผ๊ณ
๋๊ฐ ๋ญ๋งํ๋์ง ์๊ฒ ๋๋ฐ ๊ทธ ์์ฑ์๊ฐ ๋งํ๋ ค๋ ๋ด์ฉ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ ๋น๋์ง ์์ List A ์ List B๋ฅผ ํ ๋นํ๊ณ ํด๋ฆฌ์ดํด์ ์๋ํ์ง ์์๋ List B๊ฐ ํด๋ฆฌ์ด ๋๋ ์ํฉ๋๋ฌธ์ ๋นก์น๋ด์ฉ์
๋ฐ์ ๋๊ธ๋จ๊ฑฐ ๋ ์๋? ์์ดํผ๋ ๊ฐ์๋ฐ ์ ํ ๋ค๋ฅธ๋ง ํ๋๊ฑฐ๋ณด๋ ๋ค๋ฅธ์ค๊ฑฐ๊ฐ๊ธฐ๋ ํ๊ณ ๊ทธ๋ฆฌ๊ณ ๋ ์๋ชป ์ดํดํ๊ณ ์์
๊ธ ์์ฑ์ ๋๋๊ธ๋ณด๋ฉด ์ด๋ง์ด ๋ง๋๊ฑฐ ๊ฐ์๋ฐ?
ListB๋ฅผ ํด๋ฆฌ์ดํด๋ ListA์ ๊ฐ์ด ์๋ค๋ฉด ๋จ์์์ ListA๋ฅผ ํด๋ฆฌ์ดํด๋ ListB์ ๊ฐ์ด ์๋ค๋ฉด ๋จ์์์ ๋ฌธ์ ๊ฐ ์๊ธด๊ฑด ์ฐธ์กฐํ์ ๊ฐ์ฒ๋ผ A=B ํ๋ค๋๊ฑฐ์ ListA = ListBํ๋ฉด ListA์ ๊ฐ๋ค์ ListB๋ก ์ ๋์ด๊ฐ ๊ทธ๋์ ListA๋ฅผ Clearํ๋ฉด ListA์ ์กด์ฌํ๋ ๊ฐ๋ค์ ๋๊ตฌ๋ ์ฐธ์กฐ์ํ๊ฒ๋๊ณ ListA์ ๊ฐ๋ค์ GC๊ฐ ๋ฌผ์ด๊ฐ ใ ใ ? ์ดํด๋ผ?
๋ญ ๋ ๋ง๋ ๋ง์์ ์๊ฒ ๋ค ๊ทธ๋ฐ๊ฑด ์ธ๊ธ์๋์ด์์ผ๋ List A ์ ์๋ ํ ๋น๋์ด์๋ ์๋ธ๋ผ์นด๋ค๋ธ๋ผ ๋ผ๋๊ฒ๋ ๋ค๋ฅธ๊ณณ์์ ์ฐธ์กฐ๊ฐ ์๋์ด์์ผ๋ฉด GC์ ์ํด ์ฌ๋ผ์ก๊ฒ ๋ค. ๊ทผ๋ฐ ๊ธ์์ฑ์๊ฐ ํฌ์ธํธ๋ก ๋๊ฑด ๋ ํผ๋ฐ์คํ์ ์ ๋ฐธ๋ฅํ์ ์ฒ๋ผ ์จ์ ๋นก์ณค๋ค๋๊ฑฐ์
List A ๋ฅผ ์๊พธ ๋ฉ๋ชจ๋ฆฌ๋ ๋์ผ์ํ๋๋ฐ List A ๋ ๊ทธ๋ฅ ์ด๋ฆ์ด๊ณ List A ์ ํด๋ฆฌ์ด๋ List B ์ ํด๋ฆฌ์ด๊ฐ ๋ง์ง. ๋๊ฐ ๋ณธ๋ฌธ์๋ ์จ๋์๊ฑฐ์ฒ๋ผ List A์ ํด๋ฆฌ์ด๋ ์๋ธ๋ผ์นด๋ค๋ธ๋ผ์ ํด๋ฆฌ์ด๊ฐ ์๋๋ค๋ผ๋ ์์ผ๋ก ์จ๋์ผ๋ฉด ๋ชฐ๋ผ
๋ญ์๋ฆฌํ๋๊ฑฐ์ผ ListA์ Clear๊ฐ ์ ListB์ ํด๋ฆฌ์ด๊ฐ ๋ง๋ค๋๊ฑฐ์ผ????? ๋ด๊ฐ ๋ญ ์๋ชป ์๊ณ ์๋๊ฑฐ์ผ? ์๋๊ฑด๋ฐ?
๊ธ๊ณ ListA๋ฅผ ๋ฌด์จ ์๊พธ ๋ฉ๋ชจ๋ฆฌ๋ ๋์ผ์ํด ListA์ ๊ฐ์ด ์๋ค๋ ์ ์ ํ์ ๋งํ๋๊ฑด๋ฐ ์ดํด์๋ผ?
์๋ฅผ ๋ค์ด List<string> B = new List<string>(); List<string> A = B; A.clear(); ์ฌ๊ธฐ์ List A ์ List B ๋ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๊ฐ๋ฅดํค๊ณ ์์ผ๋ ๋๋ค ํด๋ฆฌ์ด ๋ง์ง? ๋๊ฐ ๋งํ๊ณ ์ถ์๊ฑด List A๊ฐ ๊ธฐ์กด์ ๊ฐ๋ฅดํค๊ณ ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํด๋ฆฌ์ด ๋์ง ์๋๋ค ๋ผ๋๊ฒ๊ฐ์๋ฐ List A ์ ๊ทธ ๊ธฐ์กด์ ๊ฐ๋ฅดํค๊ณ ์๋ ๋ฉ๋ชจ๋ฆฌ๊ณต๊ฐ์ ๋์ผ์ํด์ ๋ถ๋ฅด์ง ๋ง๋ผ๋๊ฑฐ์
์.. ์ ๊ทธ ์ฐ์ฌ๋ฆฐ์ ๊ฐ ๋๊ฐ๋ฆฌ๋๋ฆฌ๊ณ ์ถ๋ค๋์ ๋ ๋๊ฐ์์ ๋ค...ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ
List A ๊ฐ List B ๋ฅผ ์ฐธ์กฐํ ์์ ์์ List A๊ฐ ๊ฐ๋ฅดํค๊ณ ์๋ ์๋์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ List A๋ผ ๋ถ๋ฅด์ง ์๋๊ฒ ๋ง๋ค๊ณ ๋งํ๋๊ฑฐ์
๋ ํน์ ๋๊ฐ๋ฆฌ ๊นจ๊ณ ์ถ๋ค๋ ์ฐ ์ฌ๋ฆฐ์ ๋ ๊ฐ์ด ์ผํ๋ ์ ๋?ใ ใ ใ ใ ใ ใ ใ ใ ใ
๋ ๋๊ฐ ๋ฌด์จ๋งํ๊ณ ์ถ์์ง ์๊ฒ ๋๋ฐ ๋ ์ ํ ์ดํด๋ฅผ ๋ชปํ๋๊ตฌ๋ ์ฌ๊ธฐ๊น์ง ํ์. ๋ค ์๋ ๋ด์ฉ ํผ์๋ง ์๋ค๋๋ฏ์ด ์๊ธฐํ๋๊ฑฐ ๋ค์ด์ฃผ๋๊ฑฐ๋ ์ญ๊ฒน๋ค.
LitsA = ListB ์ด๊ฒ ์ ์ด์ ๋ฉ๋ชจ๋ฆฌ ์ฌ๋ ค์ง๊ฒ ์ฐธ์กฐ๋๋๊ฒ ์๋๋ผ๊ณ ์ดํด์๋ผ?
๋ ํผ๋ฐ์คํ์ ์ ๋ฐธ๋ฅํ์ ์ฒ๋ผ ์ฌ์ฉํ๊ฑฐ์ง int b = 5; int a = b; a = 0; (๊ฒฐ๊ณผ a = 0, b = 5) ์ ์ ์ด ๋ ํผ๋ฐ์คํ์ ์ ๋ํ ์ดํด๊ฐ ์์ด์ ์ด๋ฐ์์ผ๋ก ๋์ํ๊ธธ ๋ฐ๋ผ๋ฉด์ ์ฝ๋ค๋ฅด ์์ฑํด์ ๋นก์นจ