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

IT&ํ”„๋กœ๊ทธ๋žจ

๋Ÿฌ์ŠคํŠธ Rust ์†Œ์œ ๊ถŒ ๊ฐœ๋… ์™„๋ฒฝ ์ •๋ฆฌ: ๋ฉ”๋ชจ๋ฆฌ ์•ˆ์ „์„ฑ์˜ ํ•ต์‹ฌ ์›๋ฆฌ ์ดํ•ดํ•˜๊ธฐ

๐Ÿ“‹ ๋Ÿฌ์ŠคํŠธ Rust ์†Œ์œ ๊ถŒ ๊ฐœ๋… ์™„๋ฒฝ ์ •๋ฆฌ: ๋ฉ”๋ชจ๋ฆฌ ์•ˆ์ „์„ฑ์˜ ํ•ต์‹ฌ ์›๋ฆฌ ์ดํ•ดํ•˜๊ธฐ

# ๋Ÿฌ์ŠคํŠธ(Rust) ์†Œ์œ ๊ถŒ ๊ฐœ๋… ์™„๋ฒฝ ์ •๋ฆฌ: ๋ฉ”๋ชจ๋ฆฌ ์•ˆ์ „์„ฑ์˜ ํ•ต์‹ฌ ์›๋ฆฌ ์ดํ•ดํ•˜๊ธฐ

C/C++์˜ ๋ฉ”๋ชจ๋ฆฌ ์ง์ ‘ ๊ด€๋ฆฌ ๋ถ€๋‹ด๊ณผ Java, Go, Python๊ณผ ๊ฐ™์€ ์–ธ์–ด๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ(GC)์˜ ์„ฑ๋Šฅ ์ง€์—ฐ ์‚ฌ์ด์—์„œ ๊ณ ๋ฏผํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋“ค์—๊ฒŒ ๋Ÿฌ์ŠคํŠธ(Rust)๋Š” ํ˜์‹ ์ ์ธ ๋Œ€์•ˆ์œผ๋กœ ์ž๋ฆฌ ์žก์•˜์Šต๋‹ˆ๋‹ค. ๋Ÿฌ์ŠคํŠธ๊ฐ€ ๋ณ„๋„์˜ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ ์—†์ด๋„ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜์™€ ๋ฐ์ดํ„ฐ ๊ฒฝํ•ฉ์„ ์›์ฒœ ์ฐจ๋‹จํ•  ์ˆ˜ ์žˆ๋Š” ๋น„๊ฒฐ์€ ๋ฐ”๋กœ '์†Œ์œ ๊ถŒ(Ownership)'์ด๋ผ๋Š” ๋…์ฐฝ์ ์ธ ์‹œ์Šคํ…œ์— ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ธ€์—์„œ๋Š” ๋Ÿฌ์ŠคํŠธ๋ฅผ ์ฒ˜์Œ ์ ‘ํ•  ๋•Œ ๊ฐ€์žฅ ํฐ ์ง„์ž…์žฅ๋ฒฝ์œผ๋กœ ๋А๊ปด์ง€๋Š” ์†Œ์œ ๊ถŒ์˜ ํ•ต์‹ฌ ๊ฐœ๋…์„ ์‹ค๋ฌด์  ๊ด€์ ์—์„œ ํ’€์ดํ•ฉ๋‹ˆ๋‹ค. ์™œ ์ด ์‹œ์Šคํ…œ์ด ์„ค๊ณ„๋˜์—ˆ๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ์‹ค์ œ ์ฝ”๋“œ ์ž‘์„ฑ ์‹œ ์–ด๋–ค ๊ทœ์น™์„ ์ค€์ˆ˜ํ•ด์•ผ ํ•˜๋Š”์ง€ ์ฒด๊ณ„์ ์œผ๋กœ ์ •๋ฆฌํ•˜์—ฌ ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ์„ ๋†’์ด๋Š” ๊ฐ€์ด๋“œ๋ฅผ ์ œ๊ณตํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“‘ ๋ชฉ์ฐจ

  1. ์†Œ์œ ๊ถŒ์˜ ์„ธ ๊ฐ€์ง€ ํ•ต์‹ฌ ์›์น™๊ณผ ์ •์˜
  2. ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ์ „๋žต: ์Šคํƒ(Stack)๊ณผ ํž™(Heap)์˜ ์ฐจ์ด
  3. ๊ฐ’์˜ ์ด๋™(Move)๊ณผ ๋ณต์‚ฌ(Copy)์˜ ๋™์ž‘ ๋ฐฉ์‹
  4. ์ฐธ์กฐ์™€ ๋นŒ๋ฆผ(Borrowing)์„ ํ†ตํ•œ ํšจ์œจ์ ์ธ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ
  5. ๊ฐ€๋ณ€ ์ฐธ์กฐ์˜ ์ œ์•ฝ๊ณผ ๋ฐ์ดํ„ฐ ๊ฒฝํ•ฉ ๋ฐฉ์ง€ ์›๋ฆฌ
  6. ์†Œ์œ ๊ถŒ ์‹œ์Šคํ…œ ๋„์ž… ์‹œ ๋ฐœ์ƒํ•˜๋Š” ์œ ๋ฌดํ˜•์˜ ๋น„์šฉ ๋ถ„์„

์†Œ์œ ๊ถŒ์˜ ์„ธ ๊ฐ€์ง€ ํ•ต์‹ฌ ์›์น™

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

  1. ๋Ÿฌ์ŠคํŠธ๊ฐ€ ๋‹ค๋ฃจ๋Š” ๋ชจ๋“  ๊ฐ’์€ '์†Œ์œ ์ž(Owner)'๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ๋ณ€์ˆ˜๋ฅผ ํ•˜๋‚˜์”ฉ ๊ฐ€์ง‘๋‹ˆ๋‹ค.
  2. ํŠน์ • ์‹œ์ ์— ๊ฐ’์— ๋Œ€ํ•œ ์†Œ์œ ์ž๋Š” ๋‹จ ํ•˜๋‚˜๋งŒ ์กด์žฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ์†Œ์œ ์ž๊ฐ€ ์ž์‹ ์ด ์„ ์–ธ๋œ ๋ฒ”์œ„(Scope)๋ฅผ ๋ฒ—์–ด๋‚˜๋ฉด, ํ•ด๋‹น ๊ฐ’์€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ฆ‰์‹œ ์ œ๊ฑฐ(Drop)๋ฉ๋‹ˆ๋‹ค.

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

๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ์ „๋žต: ์Šคํƒ๊ณผ ํž™์˜ ๊ตฌ๋ถ„

์†Œ์œ ๊ถŒ์„ ์ •ํ™•ํžˆ ์ดํ•ดํ•˜๋ ค๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์˜ ์–ด๋А ์˜์—ญ์— ์ €์žฅ๋˜๋Š”์ง€ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋Ÿฌ์ŠคํŠธ๋Š” ๋ฐ์ดํ„ฐ์˜ ์„ฑ๊ฒฉ์— ๋”ฐ๋ผ ์Šคํƒ๊ณผ ํž™์„ ๋‹ค๋ฅด๊ฒŒ ํ™œ์šฉํ•˜๋ฉฐ, ์†Œ์œ ๊ถŒ ์‹œ์Šคํ…œ์€ ์ฃผ๋กœ ํž™ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์— ์ง‘์ค‘ํ•ฉ๋‹ˆ๋‹ค.

  1. ์Šคํƒ(Stack): ํฌ๊ธฐ๊ฐ€ ๊ณ ์ •๋œ ๋ฐ์ดํ„ฐ(์ •์ˆ˜, ๋ถ€๋™ ์†Œ์ˆ˜์ , ๋ถˆ๋ฆฐ ๋“ฑ)๊ฐ€ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ ํƒ€์ž„์— ํฌ๊ธฐ๋ฅผ ์•Œ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ ‘๊ทผ ์†๋„๊ฐ€ ๋งค์šฐ ๋น ๋ฆ…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋Š” ์†Œ์œ ๊ถŒ ์ด์ „ ๋Œ€์‹  '๋ณต์‚ฌ(Copy)'๊ฐ€ ์ผ์–ด๋‚ฉ๋‹ˆ๋‹ค.
  2. ํž™(Heap): ์‹คํ–‰ ์ค‘์— ํฌ๊ธฐ๊ฐ€ ๋ณ€ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ(String, Vector ๋“ฑ)๊ฐ€ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์ž๊ฐ€ ๋นˆ ๊ณต๊ฐ„์„ ์ฐพ์•„ ์ฃผ์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ, ์ด ์ฃผ์†Œ(ํฌ์ธํ„ฐ)๋Š” ์Šคํƒ์— ์ €์žฅ๋˜๊ณ  ์‹ค์ œ ๋ฐ์ดํ„ฐ๋Š” ํž™์— ์œ„์น˜ํ•ฉ๋‹ˆ๋‹ค.
  3. ๊ด€๋ฆฌ ๋น„์šฉ์˜ ์ฐจ์ด: ํž™ ๋ฉ”๋ชจ๋ฆฌ๋Š” ํ• ๋‹น๊ณผ ํ•ด์ œ ์‹œ ์„ฑ๋Šฅ ๋น„์šฉ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋Ÿฌ์ŠคํŠธ์˜ ์†Œ์œ ๊ถŒ์€ ์ด ํž™ ๋ฐ์ดํ„ฐ๋ฅผ ์–ธ์ œ ํ•ด์ œํ• ์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๊ธฐ์ค€์ด ๋ฉ๋‹ˆ๋‹ค.

๊ฐ’์˜ ์ด๋™(Move)๊ณผ ๋ณต์‚ฌ(Copy)

๋Ÿฌ์ŠคํŠธ์—์„œ ๋ณ€์ˆ˜ ๊ฐ„์— ๊ฐ’์„ ๋Œ€์ž…ํ•  ๋•Œ, ๋ฐ์ดํ„ฐ์˜ ์œ ํ˜•์— ๋”ฐ๋ผ '์ด๋™' ํ˜น์€ '๋ณต์‚ฌ'๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์„ฑ๋Šฅ๊ณผ ๋ฉ”๋ชจ๋ฆฌ ์•ˆ์ „์„ฑ์„ ๋™์‹œ์— ์žก๊ธฐ ์œ„ํ•œ ์„ค๊ณ„์ž…๋‹ˆ๋‹ค.

  1. ์ด๋™(Move): ํž™ ๋ฐ์ดํ„ฐ๋ฅผ ์†Œ์œ ํ•œ ๋ณ€์ˆ˜๋ฅผ ๋‹ค๋ฅธ ๋ณ€์ˆ˜์— ๋Œ€์ž…ํ•˜๋ฉด ์†Œ์œ ๊ถŒ์ด ์™„์ „ํžˆ ๋„˜์–ด๊ฐ‘๋‹ˆ๋‹ค. ์ด์ „ ๋ณ€์ˆ˜๋Š” ๋” ์ด์ƒ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ์ƒํƒœ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋‘ ๋ณ€์ˆ˜๊ฐ€ ๋™์‹œ์— ๊ฐ™์€ ํž™ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•˜๋ ค๋Š” '์ด์ค‘ ํ•ด์ œ(Double Free)' ์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.
  2. ๋ณต์‚ฌ(Copy): ์Šคํƒ์— ์ €์žฅ๋˜๋Š” ๊ธฐ๋ณธ ํƒ€์ž…๋“ค์€ ๋Œ€์ž… ์‹œ ๊ฐ’์ด ๋ณต์‚ฌ๋˜์–ด ์–‘์ชฝ ๋ณ€์ˆ˜ ๋ชจ๋‘ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” 'Copy ํŠธ๋ ˆ์ดํŠธ'๋ฅผ ๊ตฌํ˜„ํ•œ ํƒ€์ž…๋“ค์— ํ•œ์ •๋ฉ๋‹ˆ๋‹ค.
  3. ๊นŠ์€ ๋ณต์‚ฌ(Clone): ํž™ ๋ฐ์ดํ„ฐ์˜ ์†Œ์œ ๊ถŒ์„ ์œ ์ง€ํ•˜๋ฉด์„œ ์ƒˆ๋กœ์šด ๋ณต์‚ฌ๋ณธ์„ ๋งŒ๋“ค๊ณ  ์‹ถ์„ ๋•Œ๋Š” .clone() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ช…์‹œ์ ์ธ ๋น„์šฉ(๋ฉ”๋ชจ๋ฆฌ ์ถ”๊ฐ€ ํ• ๋‹น ๋ฐ ๋ฐ์ดํ„ฐ ๋ณต์ œ ์‹œ๊ฐ„)์ด ๋ฐœ์ƒํ•จ์„ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์ธ์ง€์‹œํ‚ต๋‹ˆ๋‹ค.

์ฐธ์กฐ์™€ ๋นŒ๋ฆผ(Borrowing)

์†Œ์œ ๊ถŒ์„ ๋งค๋ฒˆ ๋„˜๊ฒจ์ฃผ๋Š” ๊ฒƒ์€ ๋น„ํšจ์œจ์ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋Ÿฌ์ŠคํŠธ๋Š” '์ฐธ์กฐ(&)'๋ฅผ ํ†ตํ•œ '๋นŒ๋ฆผ' ๊ฐœ๋…์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ์†Œ์œ ํ•˜์ง€ ์•Š๊ณ  ์ฃผ์†Œ๋งŒ ์ฐธ์กฐํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

  1. ๋ถˆ๋ณ€ ์ฐธ์กฐ(&T): ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ธฐ๋งŒ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์—ฌ๋Ÿฌ ๊ฐœ๊ฐ€ ๋™์‹œ์— ์กด์žฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ๊ฐ€๋ณ€ ์ฐธ์กฐ(&mut T): ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ํŠน์ • ์‹œ์ ์— ๋‹จ ํ•˜๋‚˜๋งŒ ์กด์žฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ์ฐธ์กฐ์˜ ์œ ํšจ์„ฑ: ์ฐธ์กฐ์ž๋Š” ์†Œ์œ ์ž๋ณด๋‹ค ์˜ค๋ž˜ ์‚ด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ์˜ '๋นŒ๋ฆผ ๊ฒ€์‚ฌ๊ธฐ(Borrow Checker)'๊ฐ€ ์ด๋ฅผ ๊ฐ์‹œํ•˜์—ฌ ๋Œ€์ƒ์„ ์žƒ์€ ํฌ์ธํ„ฐ(Dangling Pointer) ๋ฐœ์ƒ์„ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค.

๊ฐ€๋ณ€ ์ฐธ์กฐ์˜ ์ œ์•ฝ๊ณผ ๋ฐ์ดํ„ฐ ๊ฒฝํ•ฉ ๋ฐฉ์ง€

๋Ÿฌ์ŠคํŠธ ์†Œ์œ ๊ถŒ ์‹œ์Šคํ…œ์˜ ๊ฐ€์žฅ ๊ฐ•๋ ฅํ•œ ํŠน์ง• ์ค‘ ํ•˜๋‚˜๋Š” ์ปดํŒŒ์ผ ํƒ€์ž„์— ๋ฐ์ดํ„ฐ ๊ฒฝํ•ฉ(Data Race)์„ ๋ฐฉ์ง€ํ•œ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—„๊ฒฉํ•œ ๊ทœ์น™์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

  1. ์ƒํ˜ธ ๋ฐฐ์ œ ์›์น™: ๋™์ผํ•œ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ๊ฐ€๋ณ€ ์ฐธ์กฐ๊ฐ€ ์กด์žฌํ•  ๋•Œ, ๋‹ค๋ฅธ ์–ด๋–ค ์ฐธ์กฐ(๊ฐ€๋ณ€ ๋˜๋Š” ๋ถˆ๋ณ€)๋„ ๋™์‹œ์— ์กด์žฌํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  2. ์ฝ๊ธฐ ์ „์šฉ ๋‹ค์ค‘์„ฑ: ๋ถˆ๋ณ€ ์ฐธ์กฐ๋งŒ ์กด์žฌํ•  ๋•Œ๋Š” ๊ฐœ์ˆ˜์— ์ œํ•œ ์—†์ด ๊ณต์œ ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” '๋‹ค์ˆ˜์˜ ์ฝ๊ธฐ' ๋˜๋Š” 'ํ•˜๋‚˜์˜ ์“ฐ๊ธฐ' ์ค‘ ํ•˜๋‚˜๋งŒ ํ—ˆ์šฉํ•˜๋Š” ์ฝ๊ธฐ-์“ฐ๊ธฐ ์ž ๊ธˆ(Read-Write Lock)์˜ ์›๋ฆฌ์™€ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.
  3. ๋™๊ธฐํ™” ๋น„์šฉ ์ ˆ๊ฐ: ์ด๋Ÿฌํ•œ ์ œ์•ฝ ๋•๋ถ„์— ๋Ÿฌ์ŠคํŠธ๋Š” ๋Ÿฐํƒ€์ž„์— ๋ณ„๋„์˜ ๋ฝ(Lock) ์ฒ˜๋ฆฌ ์—†์ด๋„ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ์•ˆ์ „ํ•œ ์ฝ”๋“œ ์ž‘์„ฑ์ด ๊ฐ€๋Šฅํ•ด์ง€๋ฉฐ, ์ด๋Š” ์‹คํ–‰ ์„ฑ๋Šฅ ํ–ฅ์ƒ์œผ๋กœ ์ด์–ด์ง‘๋‹ˆ๋‹ค.

์†Œ์œ ๊ถŒ ์‹œ์Šคํ…œ ๋„์ž…์˜ ๋น„์šฉ๊ณผ ํŒ๋‹จ ๊ธฐ์ค€

๋Ÿฌ์ŠคํŠธ์˜ ์†Œ์œ ๊ถŒ์€ ๊ณต์งœ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์„ฑ๋Šฅ์  ์ด์ ์€ ๋ช…ํ™•ํ•˜์ง€๋งŒ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง€๋ถˆํ•ด์•ผ ํ•  ๋น„์šฉ๋„ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ์‹ค๋ฌด ๋„์ž… ์‹œ ๋‹ค์Œ์˜ ์š”์†Œ๋“ค์„ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  1. ์ธ์ง€ ๋ถ€ํ•˜ ๋ฐ ํ•™์Šต ๋น„์šฉ: ์†Œ์œ ๊ถŒ ๊ทœ์น™์€ ์ดˆ๊ธฐ ํ•™์Šต ๊ณก์„ ์ด ๋งค์šฐ ๊ฐ€ํŒŒ๋ฆ…๋‹ˆ๋‹ค. ๋นŒ๋ฆผ ๊ฒ€์‚ฌ๊ธฐ์™€์˜ '์‹ธ์›€'์ด๋ผ ๋ถˆ๋ฆฌ๋Š” ๊ณผ์ •์—์„œ ๊ฐœ๋ฐœ ์‹œ๊ฐ„์ด ๋Š˜์–ด๋‚  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„์˜ ๋ณต์žก๋„: ๋ฐ์ดํ„ฐ๋ฅผ ๊ณ„์ธต ๊ตฌ์กฐ๋กœ ์„ค๊ณ„ํ•˜์ง€ ์•Š์œผ๋ฉด ์†Œ์œ ๊ถŒ ๊ด€๊ณ„๊ฐ€ ๊ผฌ์ด๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. ์ˆœํ™˜ ์ฐธ์กฐ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ Rc, Arc, RefCell ๊ฐ™์€ ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋ฉฐ ์ด๋Š” ์ถ”๊ฐ€์ ์ธ ๋Ÿฐํƒ€์ž„ ๋น„์šฉ์„ ์ˆ˜๋ฐ˜ํ•ฉ๋‹ˆ๋‹ค.
  3. ์‹คํ–‰ ์„ฑ๋Šฅ(Zero-cost Abstraction): ๋Ÿฌ์ŠคํŠธ ์†Œ์œ ๊ถŒ์€ ์ปดํŒŒ์ผ ํƒ€์ž„์— ๋ชจ๋“  ๊ฒ€์‚ฌ๊ฐ€ ๋๋‚˜๋ฏ€๋กœ ์‹คํ–‰ ์‹œ์ ์—๋Š” ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๋กœ ์ธํ•œ 'Stop the world' ํ˜„์ƒ์ด ์ „ํ˜€ ์—†์Šต๋‹ˆ๋‹ค. ์ง€์—ฐ ์‹œ๊ฐ„(Latency)์ด ์ค‘์š”ํ•œ ์‹œ์Šคํ…œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋‚˜ ์‹ค์‹œ๊ฐ„ ์„œ๋น„์Šค์—์„œ๋Š” ์ด ๋น„์šฉ ๊ตฌ์กฐ๊ฐ€ ๋งค์šฐ ์œ ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๋Ÿฌ์ŠคํŠธ์˜ ์†Œ์œ ๊ถŒ์€ ๋ฉ”๋ชจ๋ฆฌ ์•ˆ์ „์„ฑ์„ ํ™•๋ณดํ•˜๊ธฐ ์œ„ํ•ด ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฝ”๋“œ์˜ ํ๋ฆ„๊ณผ ๋ฐ์ดํ„ฐ์˜ ์ƒ๋ช… ์ฃผ๊ธฐ๋ฅผ ๋ช…ํ™•ํžˆ ์ดํ•ดํ•˜๋„๋ก ๊ฐ•์ œํ•˜๋Š” ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค. ์ดˆ๊ธฐ์—๋Š” ์ปดํŒŒ์ผ ์—๋Ÿฌ๋ฅผ ๋งˆ์ฃผํ•˜๋Š” ์ผ์ด ์žฆ๊ฒ ์ง€๋งŒ, ์ด๋ฅผ ํ†ตํ•ด ๋Ÿฐํƒ€์ž„์— ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์น˜๋ช…์ ์ธ ๋ฒ„๊ทธ๋ฅผ ๋ฏธ๋ฆฌ ์ฐจ๋‹จํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด ๊ฐ€์žฅ ํฐ ์ž์‚ฐ์ด ๋ฉ๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ ๋Ÿฌ์ŠคํŠธ ์†Œ์œ ๊ถŒ์„ ํšจ๊ณผ์ ์œผ๋กœ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•œ ํ•ต์‹ฌ ์ฒดํฌ ํฌ์ธํŠธ๋ฅผ ์ •๋ฆฌํ•ด ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

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