๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

CS/๊ฐœ๋…

์Šคํƒ(Stack)๊ณผ ํž™(Heap) ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ ์„ค๋ช…

์Šคํƒ๊ณผ ํž™

 

๐Ÿ“Œ ์Šคํƒ(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๊ฐ€ ๊ฐ™์€ ํž™ ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋ฏ€๋กœ, ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ .