๋ฐ์ํ
๋งค๋ฒ ๊ฐ์ฒด์ ๋ํด์ ์ดํด๋ฅผ ํ๋ค๊ณ ์๊ฐํ์ง๋ง, ๋ง์ ์ฌ์ฉ์ ํด๋ณด๋ฉด ์ด๊ฒ ์ ์ด๋ ๊ฒ ๊ฐ์ด ์ฐํ์ง? ๋ผ๋ ๊ฒฝํ์ด ๋ง์๋ค.. ๋ค์ ํ๋ฒ ์ ๋๋ก ์ ๋ฆฌํด๋ณด๋๋ก ํ๊ฒ ์ด๋ค..
๋ด๊ฐ ์ดํดํ๊ธฐ ์ด๋ ค์ด ์
// 1๋ฒ ๊ณผ์
CopyTest c1 = new CopyTest();
People test = new People(10, "a");
c1.man = test;
// 2๋ฒ ๊ณผ์
People peo2 = new People(20, "b");
test = peo2; // ์๋๋ผ๋ฉด GC์ ์ํด new People(100,"100")์ด ์ ๋ฆฌ ๋๋๋ฐ, c1.man์ด ์ก๊ณ ์์ด์ ์์ง ๋์์ด ์๋๊ฒ ๋๋ค.
// ์ถ๋ ฅ
System.out.println(c1.man.age); // 10 (๊ธฐ์กด test์ ์ฃผ์๊ฐ์ ์ฐธ์กฐํ๊ณ ์๋ค.)
System.out.println(test.age); // 20 (peo2์ ์ฃผ์๊ฐ์ ์ฐธ์กฐ)
๋ด๊ฐ ์๊ฐํ๊ธฐ์๋ c1.man์ด test๋ฅผ ์ฐธ์กฐํ๋๊น test๋ฅผ ๋ง์ฝ์ peo2๋ก ๋ฐ๊ฟจ์ ๊ฒฝ์ฐ์
c1.man๋ peo2๋ก ๋ฐ๋์ค ์์๋๋ฐ ์๋ชป ๋ ์๊ฐ์ด๋ค.
1๋ฒ ๊ณผ์
CopyTest c1 = new CopyTest();
People test = new People(10, "a");
c1.man = test; // c1.man์ด test๋ฅผ ์ฐธ์กฐํ๋๊ฒ ์๋๊ณ , test์ ํ ์ฃผ์๊ฐ์ ์ฐธ์กฐํ๊ณ ์๋ค. (์ด ๋ง์, test์ ์ฃผ์๊ฐ์ด ๋ณ๊ฒฝ๋์ด๋ c1.man์ด ์ฐธ์กฐํ๋ ์ฃผ์๊ฐ์ด ๋ฐ๋์ง ์๋๋ค.)
2๋ฒ ๊ณผ์
People peo2 = new People(20, "b");
test = peo2; // ์๋๋ผ๋ฉด GC์ ์ํด new People(100,"100")์ด ์ ๋ฆฌ ๋๋๋ฐ, c1.man์ด ์ก๊ณ ์์ด์ ์์ง ๋์์ด ์๋๊ฒ ๋๋ค.
์ด ์ํ๋ก ์ถ๋ ฅ์ ํ๋ฉด?
๊ทธ๋ฆผ์ผ๋ก ๋ณด๋๊น ์ฝ๋ค. ๋น์ฐํ test์ age๋ฅผ ์ถ๋ ฅ์ํค๋ฉด 20 ์ด ์ถ๋ ฅ๋๊ณ ,
man์ age๋ฅผ ์ถ๋ ฅ์ํค๋ฉด man์ด ๊ฐ๋ฆฌํค๊ณ ์๋ ์ฃผ์๊ฐ์ age๋ 10์ด ์ถ๋ ฅ์ด ๋ ๊ฒ์ด๋ค.
๋ค๋ฅธ ๋ฌธ์
// 1๋ฒ
CopyTest copy = new CopyTest();
People people1 = new People(10, "a");
copy.man = people1;
People test = copy.man; // c2.man์ ๋ฐ๋ผ๋ณด๋๊ฒ ์๋๋ผ, t1์ ์ฃผ์๊ฐ์ ์ฐธ์กฐํ๋ค. ๊ทธ๋ฌ๋ฏ๋ก ๋ณ๊ฒฝํด๋ ์์ฉ์ด ์๋ค.
System.out.println(test); // people1์ ์ฃผ์๊ฐ ์ฐํ
// 2๋ฒ
People people2 = new People(20, "b"); // heap ์์ญ์ ์๋ก์ด ๊ฐ์ฒด ์์ฑ
copy.man = people2; // copy.man ์ด ๊ธฐ์กด์ ์ฐธ์กฐํ๋ people1์ ๋์ด์ ์ฐธ์กฐํ์ง ์๊ณ , ์๋ก์ด people2๋ฅผ ์ฐธ์กฐํ๊ณ ์๋ค.
People test2 = copy.man; // man1์ people2๋ฅผ ์ฐธ์กฐํ๊ณ ์๋ค. copy.man์ ๊ฐ์ด ๋ฐ๋์ด๋ man1์๋ ์ํฅ์ด ์๋ค.
System.out.println(test); // people1์ ์ฃผ์๊ฐ ์ฐํ
System.out.println(test2); // people2์ ์ฃผ์๊ฐ ์ฐํ.
copy.man.age = 30; // copy.man์ people2์ ์ฃผ์๊ฐ์ ์ฐธ์กฐํจ. ๋ฐ๋๋๊ฒ์ people2์ age๊ฐ 30์ผ๋ก ๋ฐ๋.
System.out.println(test.age); // 1
System.out.println(test2.age); // 30
ํท๊ฐ๋ฆฌ๋ฉด ๊ทธ๋ฆผ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๊ทธ๋ ค๋ณด๋๋ก ํ์
์ฐธ๊ณ ํ ์ฌ์ดํธ
๋ฐ์ํ