๐ ์คํ(Stack) ๋ฉ๋ชจ๋ฆฌ
์คํ์ ์ง์ญ ๋ณ์์ ํจ์ ํธ์ถ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์
๋๋ค.
๊ทธ๋ฆผ์์๋ ์คํ(Stack) ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋์ ์ฃผ์์์ ๋ฎ์ ์ฃผ์๋ก ์๋ผ๋ ๊ตฌ์กฐ๋ก ํํ๋์์ต๋๋ค.
์คํ์ ์ ์ฅ๋ ๋ฐ์ดํฐ:
์ฃผ์ | ๋ฐ์ดํฐ |
0xB5D37E44C | arrayNum2 = 0x1F771163C00 (ํ์ ๋ฐฐ์ด ์ฃผ์) |
0xB5D37E444 | arrayNum = 0x1F771163C00 (ํ์ ๋ฐฐ์ด ์ฃผ์) |
0xB5D37E440 | num2 = 5 (๊ฐ ํ์ ) |
0xB5D37E43C | num = 5 (๊ฐ ํ์ ) |
โ ๊ฐ ํ์
(int)์ธ num๊ณผ num2๋ ์ง์ ๊ฐ์ด ์ ์ฅ๋จ.
โ ์ฐธ์กฐ ํ์
(int[])์ธ arrayNum๊ณผ arrayNum2๋ ํ์ ๊ฐ๋ฆฌํค๋ ์ฃผ์(์ฐธ์กฐ)๋ง ์ ์ฅ๋จ.
๐ ํ(Heap) ๋ฉ๋ชจ๋ฆฌ
ํ์ ์ฐธ์กฐ ํ์
๊ฐ์ฒด(๋ฐฐ์ด, ํด๋์ค ์ธ์คํด์ค ๋ฑ)๊ฐ ์ ์ฅ๋๋ ๊ณต๊ฐ์
๋๋ค.
ํ์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ ๊ฐ๋น์ง ์ปฌ๋ ํฐ(GC) ์ ์ํด ๊ด๋ฆฌ๋๋ฉฐ, ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ผ๋ฉด ์๋ ํด์ ๋ฉ๋๋ค.
ํ์ ์ ์ฅ๋ ๋ฐ์ดํฐ:
์ฃผ์ | ๋ฐ์ดํฐ |
0x1F771163C00 | 10 |
0x1F771163C04 | 20 |
โ ๋ฐฐ์ด {10, 20}์ ํ์ ์ ์ฅ๋๋ฉฐ, ์คํ์ ์๋ arrayNum, arrayNum2๊ฐ ์ด๋ฅผ ์ฐธ์กฐํจ.
โ ๋ ๋ณ์๊ฐ ๊ฐ์ ์ฃผ์๋ฅผ ์ฐธ์กฐํ๋ฏ๋ก, ๋ฐฐ์ด์ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๋ฉด ๋ ๋ณ์์์ ๋์ผํ ๋ณ๊ฒฝ ์ฌํญ์ ๋ณผ ์ ์์.
๐ ์ค์ํ ๊ฐ๋ ์ ๋ฆฌ
1๏ธโฃ ๊ฐ ํ์ (Value Type)๊ณผ ์ฐธ์กฐ ํ์ (Reference Type)
- int num = 5; → ๊ฐ ํ์ (int) ์ด๋ฏ๋ก, ์คํ(Stack)์ ๊ฐ์ด ์ง์ ์ ์ฅ๋จ.
- int[] arrayNum = { 10, 20 }; → ์ฐธ์กฐ ํ์ (int[]) ์ด๋ฏ๋ก, ์คํ์๋ ์ฐธ์กฐ(์ฃผ์)๋ง ์ ์ฅ๋๊ณ , ์ค์ ๋ฐ์ดํฐ๋ ํ(Heap)์ ์ ์ฅ๋จ.
2๏ธโฃ ๊ฐ ๋ณต์ฌ vs ์ฐธ์กฐ ๋ณต์ฌ
- num2 = num;
→ num2๋ num์ ๊ฐ์ ๋ณต์ฌํ์ฌ ์ ์ฅํ๋ฏ๋ก, ์ดํ num2๋ฅผ ๋ณ๊ฒฝํด๋ num์ ์ํฅ ์์. - arrayNum2 = arrayNum;
→ arrayNum2๋ arrayNum์ด ๊ฐ๋ฆฌํค๋ ํ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ๋ณต์ฌํ๋ฏ๋ก, ๋ฐฐ์ด ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๋ฉด arrayNum๊ณผ arrayNum2 ๋ชจ๋ ์ํฅ์ ๋ฐ์.
3๏ธโฃ ์์ ๋ณต์ฌ(Shallow Copy)
- arrayNum2 = arrayNum; ํ๋ฉด ์๋ก์ด ๋ฐฐ์ด์ด ์์ฑ๋์ง ์๊ณ , ๊ธฐ์กด ๋ฐฐ์ด์ ์ฐธ์กฐํ๋ ์๋ก์ด ๋ณ์๊ฐ ์์ฑ๋จ.
- ์ฆ, arrayNum2[0] = 100; ํ๋ฉด arrayNum[0]๋ 100์ผ๋ก ๋ฐ๋.
๐ ์ ๋ฆฌ
โ ์คํ(Stack)
- ์ง์ญ ๋ณ์(num, num2)์ ์ฐธ์กฐ ํ์ ์ ์ฐธ์กฐ๊ฐ(arrayNum, arrayNum2)์ ์ ์ฅ.
- ๊ฐ ํ์ ์ ์คํ์ ์ง์ ๊ฐ์ด ์ ์ฅ๋จ.
โ ํ(Heap)
- ๋ฐฐ์ด { 10, 20 } ๊ฐ์ ์ฐธ์กฐ ํ์ ์ ์ค์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ.
- arrayNum, arrayNum2๊ฐ ๊ฐ์ ํ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํค๋ฏ๋ก, ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ .