Bibi's DevLog ๐Ÿค“๐ŸŽ

Swift์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ (๊ธฐ์ดˆ) ๋ณธ๋ฌธ

๐Ÿ“ฑ๐ŸŽ iOS/๐Ÿ•Š Swift

Swift์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ (๊ธฐ์ดˆ)

๋น„๋น„ bibi 2023. 1. 31. 22:31

์ฐธ๊ณ ํ•œ ๋ฌธ์„œ
https://babbab2.tistory.com/25 (Swift)
http://www.tcpschool.com/c/c_memory_structure (์ปดํ“จํ„ฐ ์ผ๋ฐ˜)
http://net-informations.com/faq/net/stack-heap.htm (์ปดํ“จํ„ฐ ์ผ๋ฐ˜ - ํž™๊ณผ ์Šคํƒ ๋น„๊ต)

๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ

ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋ฉด, ์šด์˜์ฒด์ œ(OS)๋Š” ๋ฉ”๋ชจ๋ฆฌ(RAM)์— ํ•ด๋‹น ํ”„๋กœ๊ทธ๋žจ์„ ์œ„ํ•ด ์ ์ ˆํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํ• ๋‹นํ•ด ์ค€๋‹ค.

์ด ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์€ ์ด 4๊ฐ€์ง€ ์˜์—ญ์œผ๋กœ ๋‚˜๋ˆ„์–ด์ ธ ์žˆ๋‹ค - Code, Data, Heap, Stack

memory_structure

์ถœ์ฒ˜ : TCPSchool (http://www.tcpschool.com/c/c_memory_structure)

1. Code ์ฝ”๋“œ ์˜์—ญ

  • ์šฐ๋ฆฌ๊ฐ€ ์ž‘์„ฑํ•œ ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ๊ธฐ๊ณ„์–ด ํ˜•ํƒœ๋กœ ์ €์žฅ๋จ
  • ์ปดํŒŒ์ผ ํƒ€์ž„์— ๊ฒฐ์ •๋จ
  • Read-Only (์‹คํ–‰ ์ค‘ ์ฝ”๋“œ๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋„๋ก)
  • ํ…์ŠคํŠธ ์˜์—ญ์ด๋ผ๊ณ ๋„ ๋ถ€๋ฆ„

2. Data ๋ฐ์ดํ„ฐ ์˜์—ญ

  • ์ „์—ญ๋ณ€์ˆ˜(Global Variables), static๋ณ€์ˆ˜(Type Property)๊ฐ€ ์ €์žฅ๋จ
  • ํ”„๋กœ๊ทธ๋žจ์ด ์‹œ์ž‘๋  ๋•Œ ํ• ๋‹น๋˜๊ณ , ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋˜์–ด์•ผ ํ•ด์ œ๋จ
    • ์ฆ‰ ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋˜๊ธฐ ์ „๊นŒ์ง€ ํ•ด์ œ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์˜๋ฏธ.
  • Read-Write (์‹คํ–‰ ์ค‘ ๋ณ€์ˆ˜ ๊ฐ’์ด ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ)

3. Heap ํž™ ์˜์—ญ

  • ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ํ• ๋‹น/ํ•ด์ œํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ. (= ๋™์  ํ• ๋‹น)
    • ์ฆ‰ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ณ , ๊ด€๋ฆฌํ•ด์•ผ๋งŒ ํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ด๋‹ค.
  • Swift์—์„œ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ์ง์ ‘ ํ• ๋‹นํ•˜๋Š” ๋Œ€์‹ , ์ฐธ์กฐ ํƒ€์ž… ๊ฐ’๋“ค์ด ํž™์— ์ž๋™ ํ• ๋‹น๋œ๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค, ํด๋กœ์ € ๋“ฑ
  • ๋˜ํ•œ Swift์—์„œ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ง์ ‘ ํ•ด์ œํ•˜๋Š” ๋Œ€์‹ , ARC๋ฅผ ํ†ตํ•ด ๋” ์ด์ƒ ์ฐธ์กฐ๋˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ž๋™์œผ๋กœ ํ•ด์ œํ•ด ์ค€๋‹ค.
  • ์‚ฌ์šฉํ•œ ๋‹ค์Œ์—๋Š” ๋ฐ˜๋“œ์‹œ ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ๋ฅผ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜(memory leak)๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
  • ์œ ์ผํ•˜๊ฒŒ ๋Ÿฐํƒ€์ž„์— ๊ฒฐ์ •๋˜๋Š” ์˜์—ญ์ด๋‹ค.
    • ๋”ฐ๋ผ์„œ ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๊ฐ€ ํ™•์‹คํ•˜์ง€ ์•Š์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
    • ํฌ๊ธฐ๊ฐ€ ์œ ๋™์ ์ด๋‹ค. ํ•˜์ง€๋งŒ ๊ฐ€์ƒ๋ฉ”๋ชจ๋ฆฌ์˜ ํฌ๊ธฐ์— ์˜ํ•ด ํž™ ์˜์—ญ์˜ ํฌ๊ธฐ๋„ ์ œํ•œ๋˜๊ธด ํ•œ๋‹ค.
  • ๋ฉ”๋ชจ๋ฆฌ์˜ ๋‚ฎ์€ ์ฃผ์†Œ โ†’ ๋†’์€ ์ฃผ์†Œ ๋ฐฉํ–ฅ์œผ๋กœ ํ• ๋‹น๋œ๋‹ค.
  • ํž™ ์˜์—ญ์˜ ์š”์†Œ๋“ค์€ ์„œ๋กœ ์–ด๋–ค ์˜์กด์„ฑ๋„ ์—†์œผ๋ฉฐ, ์–ธ์ œ๋“  ์ž„์˜์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์–ธ์ œ๋“  ํ• ๋‹น/ํ•ด์ œ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. ์ด ๋•Œ๋ฌธ์— ํž™ ์˜์—ญ์˜ ์–ด๋–ค ๋ถ€๋ถ„์ด ์–ด๋–ค ์‹œ์ ์— ํ• ๋‹น/ํ•ด์ œ๋˜์—ˆ๋Š”์ง€ ์ถ”์ ํ•˜๋Š” ๊ฒƒ์ด ๋ณต์žกํ•˜๋‹ค.

4. Stack ์Šคํƒ ์˜์—ญ

  • ํ”„๋กœ๊ทธ๋žจ์ด ์ž๋™์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์ž„์‹œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ
    • CPU์— ์˜ํ•ด ๊ด€๋ฆฌ ๋ฐ ์ตœ์ ํ™”๋˜๋ฏ€๋กœ ์ ‘๊ทผ์†๋„๊ฐ€ ํž™๋ณด๋‹ค ๋น ๋ฅด๋‹ค
    • ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ง์ ‘ ํ• ๋‹น/ํ•ด์ œํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค
  • ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ํ•จ์ˆ˜์˜ ์ง€์—ญ๋ณ€์ˆ˜, ํŒŒ๋ผ๋ฏธํ„ฐ, ๋ฆฌํ„ด๊ฐ’ ๋“ฑ์ด ์ €์žฅ๋œ๋‹ค. ํ•จ์ˆ˜ ์ข…๋ฃŒ ์‹œ ๊ด€๋ จ ๋ฉ”๋ชจ๋ฆฌ๋„ ํ•ด์ œ๋œ๋‹ค.
  • ํฌ๊ธฐ์— ์ œํ•œ์ด ์žˆ๋‹ค. ์ปดํŒŒ์ผ ํƒ€์ž„์— ํฌ๊ธฐ๊ฐ€ ๊ฒฐ์ •๋˜๋ฏ€๋กœ ๋ฌดํ•œํžˆ ํ• ๋‹นํ•  ์ˆ˜ ์—†๋‹ค.
  • ๋ฉ”๋ชจ๋ฆฌ์˜ ๋†’์€ ์ฃผ์†Œ โ†’ ๋‚ฎ์€ ์ฃผ์†Œ ๋ฐฉํ–ฅ์œผ๋กœ ํ• ๋‹น๋œ๋‹ค.
  • ์ž๋ฃŒ๊ตฌ์กฐ์—์„œ ๋ฐฐ์šฐ๋Š” ์Šคํƒ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ LIFO (ํ›„์ž…์„ ์ถœ)๋กœ ๋™์ž‘ํ•œ๋‹ค.

ํž™๊ณผ ์Šคํƒ ๋น„๊ต

ํž™ ์Šคํƒ
์ฐธ์กฐ ํƒ€์ž…์ด ์ €์žฅ๋จ (ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค, ํด๋กœ์ € ๋“ฑ) ๊ฐ’ ํƒ€์ž…์ด ์ €์žฅ๋จ (ํ•จ์ˆ˜์˜ ์ง€์—ญ๋ณ€์ˆ˜, ํŒŒ๋ผ๋ฏธํ„ฐ, ๋ฆฌํ„ด๊ฐ’ ๋“ฑ)
๋™์  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์„ ์œ„ํ•œ ๊ณต๊ฐ„ ์ •์  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์„ ์œ„ํ•œ ๊ณต๊ฐ„
์ƒ๋Œ€์ ์œผ๋กœ ๋Š๋ฆผ ์ƒ๋Œ€์ ์œผ๋กœ ๋น ๋ฆ„
๋Ÿฐํƒ€์ž„์— ๊ฒฐ์ • ์ปดํŒŒ์ผํƒ€์ž„์— ๊ฒฐ์ •
์ƒ๋Œ€์ ์œผ๋กœ ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ํ• ๋‹นํ•ด์•ผ ํ•  ๋•Œ ์ƒ๋Œ€์ ์œผ๋กœ ์ ์€ ๋ฐ์ดํ„ฐ๋ฅผ ํ• ๋‹นํ•ด์•ผ ํ•  ๋•Œ
๋Ÿฐํƒ€์ž„์— ์–ผ๋งŒํผ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ•„์š”๋กœ ํ•˜๋Š”์ง€ ๋ชจ๋ฅผ ๋•Œ ์ปดํŒŒ์ผ ์ „์— ์–ผ๋งŒํผ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ• ๋‹นํ•ด์•ผ ํ•˜๋Š”์ง€ ์•Œ๊ณ  ์žˆ์„ ๋•Œ
ํ”„๋กœ๊ทธ๋žจ๋งˆ๋‹ค ๋…๋ฆฝ๋œ ํž™์„ ๊ฐ€์ง ์Šค๋ ˆ๋“œ๋งˆ๋‹ค ๋…๋ฆฝ๋œ ์Šคํƒ์„ ๊ฐ€์ง (ํž™์€ ๊ณต์œ ํ•จ)
ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ํ• ๋‹น/ํ•ด์ œ๋ฅผ ๊ด€๋ฆฌํ•จ, (Swift) ARC๋กœ ๊ด€๋ฆฌํ•จ CPU๊ฐ€ ํ• ๋‹น/ํ•ด์ œ๋ฅผ ๊ด€๋ฆฌํ•จ

(๋ฒˆ์—ญ) ํž™๊ณผ ์Šคํƒ์˜ ์ฐจ์ด์ 

Differences between Stack and Heap

์Šคํƒ๊ณผ ํž™ ๋ชจ๋‘ ์ปดํ“จํ„ฐ์˜ RAM์— ์ €์žฅ๋œ๋‹ค.

๊ฐ’ ํƒ€์ž…์€ ์Šคํƒ์—, ์ฐธ์กฐ ํƒ€์ž…์€ ํž™์— ์ €์žฅ๋œ๋‹ค.

์Šคํƒ์€ ์ •์  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์— ์‚ฌ์šฉ๋˜๊ณ , ํž™์€ ๋™์  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์— ์‚ฌ์šฉ๋œ๋‹ค.

์Šคํƒ

์Šคํƒ์— ํ• ๋‹น๋œ ๋ณ€์ˆ˜๋“ค์€ ๋ฉ”๋ชจ๋ฆฌ์— ๋ฐ”๋กœ ์ €์žฅ๋˜๋ฉฐ, ์ด ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ๋น ๋ฆ…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์€ ์ปดํŒŒ์ผ ํƒ€์ž„์— ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.

ํ•จ์ˆ˜๋‚˜ ๋ฉ”์„œ๋“œ๊ฐ€ ๋‹ค๋ฅธ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ๋˜ ๋‹ค๋ฅธ ํ•จ์ˆ˜๋ฅผ ์ฐจ๋ก€๋กœ ํ˜ธ์ถœํ•˜๋Š” ๊ฒฝ์šฐ, ์ด ๋ชจ๋“  ํ•จ์ˆ˜๋“ค์˜ ์‹คํ–‰์€ ๋งจ ๋งˆ์ง€๋ง‰ ํ•จ์ˆ˜๊ฐ€ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•  ๋•Œ๊นŒ์ง€ ์ •์ง€๋œ ์ฑ„๋กœ ๋‚จ์•„ ์žˆ์Šต๋‹ˆ๋‹ค. ์Šคํƒ์€ ํ•ญ์ƒ LIFO ์ˆœ์„œ๋กœ ์˜ˆ์•ฝ๋˜๋ฉฐ, ๊ฐ€์žฅ ์ตœ๊ทผ์— ์˜ˆ์•ฝ๋œ ์˜์—ญ์ด ํ•ญ์ƒ ๋‹ค์Œ์œผ๋กœ ํ•ด์ œ๋  ์˜์—ญ์ด ๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์Šคํƒ์„ ์ถ”์ ํ•˜๋Š” ๊ฒƒ์„ ๊ต‰์žฅํžˆ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งŒ๋“ค์–ด ์ฃผ๋ฉฐ, ์Šคํƒ์œผ๋กœ๋ถ€ํ„ฐ ์–ด๋–ค ์˜์—ญ์„ ํ•ด์ œํ•˜๋Š” ๊ฒƒ์€ ํฌ์ธํ„ฐ ํ•˜๋‚˜๋ฅผ ์กฐ์ •ํ•˜๋Š” ๊ฒƒ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค.

ํž™

ํž™์— ํ• ๋‹น๋œ ๋ณ€์ˆ˜๋“ค์€ ๋Ÿฐํƒ€์ž„(์‹คํ–‰ ์‹œ๊ฐ„)์— ์ž์‹ ๋“ค์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น๋ฐ›์œผ๋ฉฐ, ์ด ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์€ ์กฐ๊ธˆ ๋” ๋Š๋ฆฝ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํž™ ์˜์—ญ์˜ ํฌ๊ธฐ๋Š” ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ์˜ ํฌ๊ธฐ์— ์˜ํ•ด ์ œํ•œ๋ฉ๋‹ˆ๋‹ค. ํž™์˜ ์š”์†Œ๋Š” ๋‹ค๋ฅธ ์š”์†Œ๋“ค๊ณผ ์„œ๋กœ ์–ด๋– ํ•œ ์˜์กด์„ฑ๋„ ๊ฐ–์ง€ ์•Š์œผ๋ฉฐ, ์–ธ์ œ๋“  ์ž„์˜์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์–ธ์ œ๋“  ์˜์—ญ์„ ํ• ๋‹นํ•˜๊ณ  ํ•ด์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ํž™์˜ ์–ด๋–ค ๋ถ€๋ถ„์ด ์–ด๋–ค ์‹œ์ ์— ํ• ๋‹น๋˜์–ด ์žˆ๋Š”์ง€ ํ˜น์€ ํ•ด์ œ๋˜์–ด ์žˆ๋Š”์ง€ ์ถ”์ ํ•˜๋Š” ๊ฒƒ์„ ๋”์šฑ ๋ณต์žกํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

๋‹น์‹ ์ด ์ปดํŒŒ์ผ ํƒ€์ž„ ์ „์— ์ •ํ™•ํžˆ ์–ผ๋งŒํผ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ• ๋‹นํ•ด์•ผ ํ•˜๋Š”์ง€ ์•Œ๊ณ  ์žˆ์„ ๋•Œ, ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์ด ๋„ˆ๋ฌด ํฌ์ง€ ์•Š์„ ๋•Œ ์Šคํƒ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์ด ์‹คํ–‰ ์‹œ์ ์— ์ •ํ™•ํžˆ ์–ผ๋งŒํผ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ•„์š”๋กœ ํ•˜๋Š”์ง€ ๋ชจ๋ฅด๊ฑฐ๋‚˜, ๋งŽ์€ ์–‘์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ• ๋‹นํ•ด์•ผ ํ•  ๋•Œ ํž™์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ์ƒํ™ฉ์—์„œ, ๊ฐ ์Šค๋ ˆ๋“œ๋Š” ์ž์‹ ๋งŒ์˜ ์™„์ „ํžˆ ๋…๋ฆฝ๋œ ์Šคํƒ์„ ๊ฐ€์ง€์ง€๋งŒ ์Šคํƒ์€ ๊ณต์œ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์Šคํƒ์€ ์Šค๋ ˆ๋“œ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ณ , ํž™์€ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์Šคํƒ์€ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๊ทธ๋ฆฌ๊ณ  ์Šค๋ ˆ๋“œ ์‹คํ–‰์— ์žˆ์–ด ์ค‘์š”ํ•˜๊ฒŒ ๊ณ ๋ ค๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.