๋ณธ์ธ๋„ ์ž˜ ๋ชฐ?๋ฃจ ์ง€๋งŒ ๋‚ด๋ฑ‰์€ ๋ง์ด ์žˆ์œผ๋‹ˆ ์•„๋Š”๋งŒํผ ์ ์–ด๋ด„


Rust๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๋ฐฉ๋ฒ•์ด ๋…ํŠนํ•œ ์–ธ์–ด์ค‘์— ํ•˜๋‚˜๋‹ค.


๋ณดํ†ต ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๊ด€๋ฆฌ๋ฅผ ์–˜๊ธฐํ•˜๋ฉด

C/C++๊ฐ™์€ '๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ๊ด€๋ฆฌ' ๋ฐฉ์‹์ด๋‚˜ Java C#๊ฐ™์€ '๊ฐ€๋น„์ง€ ์ฝœ๋ ‰ํ„ฐ๊ฐ€ ๊ด€๋ฆฌ' ๋ฐฉ์‹ ๋‘๊ฐ€์ง€๋ฅผ ๋– ์˜ฌ๋ฆดํ…๋ฐ,


Rust์˜ ๊ฒฝ์šฐ๋Š” ๊ฐœ๋ฐœ์ž์˜ ์ง์ ‘๊ด€๋ฆฌ ์‹ค์ˆ˜๋กœ ์ธํ•œ ์˜ค๋ฅ˜๋„ ๋ฐฉ์ง€ํ•˜๋ฉด์„œ GC์„ฑ๋Šฅ์ด์Šˆ๋„ ์—†๋Š” ๊ฐœ์ฉŒ๋Š” ๋ฐฉ๋ฒ•์„ ํƒํ•จ

์–ธ์–ด์ž์ฒด์— ์ œ์•ฝ์„ ๊ฑธ์–ด์„œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ปดํŒŒ์ผํƒ€์ž„์— ์‹น ๋‹ค ์ถ”์ ํ•ด๋ฒ„๋ฆฌ๋Š” ๋ฐฉ๋ฒ•์ž„.

๋”ฐ๋ผ์„œ ๊ฐœ๋ฐœ ํ•  ๋•Œ ์ข€ ์—„๊ฒฉํ•œ ๊ทœ์น™์— ๋”ฐ๋ผ์„œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์จ์•ผ๋จ



๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ž€ ๋ฌด์—‡์ด๋ƒ?


-์•ˆ์“ฐ๋Š” ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ

-ํ•ด์ œ๋œ ๋ฉ”๋ชจ๋ฆฌ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ ๋ฐฉ์ง€ (๋Œ•๊ธ€๋งํฌ์ธํ„ฐ)


๋ญ ์ด๋Ÿฐ๊ฒƒ๋“ค์ธ๋ฐ,


"์•ˆ์“ฐ๋Š”๋ฉ”๋ชจ๋ฆฌ" ๋ฅผ ์–ด๋–ป๊ฒŒ ์•Œ์•„๋‚ด๋А๋ƒ๊ฐ€ ๊ด€๊ฑด์ด๋‹ค.

C/C++ ๋ฐฉ์‹์—์„œ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ํŒ๋‹จํ•ด์„œ ์ง์ ‘ '์ด๊ฑด ์ด์ œ ์•ˆ์“ฐ๋‹ˆ๊นŒ delete()' ๋ฅผ ํ•˜๋Š”๊ฑฐ๊ณ 

GC๋ฐฉ์‹์—์„œ๋Š” ๊ทธ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ์ฐธ์กฐํ•˜๊ณ ์žˆ๋Š”๊ฒŒ ํ•˜๋‚˜๋„ ์—†์œผ๋ฉด ๊ทธ ๋•Œ ์•ˆ์“ด๋‹ค ๋ผ๊ณ  ํŒ๋‹จ์„ ํ•œ๋‹ค.


rust๋„ GC๋ž‘ ๋น„์Šทํ•˜๊ฒŒ ๋ฉ”๋ชจ๋ฆฌ ์ฐธ์กฐ๊ฐ€ 0๊ฐœ๋ฉด ์•ˆ์“ด๋‹ค๋ผ๊ณ  ํŒ๋‹จ์„ ํ•œ๋‹ค. ๊ทผ๋ฐ ์ด๊ฑธ ์ปดํŒŒ์ผ ํƒ€์ž„์— ํ•จ.
์–ด์ผ€ํ–ˆ๋ƒ??

rust์— ์žˆ๋Š” ํŠน์ˆ˜ํ•œ ๊ฐœ๋…๋•Œ๋ฌธ์ด๋‹ค. rust์—๋Š” '๋ฉ”๋ชจ๋ฆฌ์˜ ์ฃผ์ธ'๊ฐœ๋…์ด ์žˆ๋‹ค. ์ด๊ฑธ ownership์ด๋ผ๊ณ  ํ•˜๋Š”๋ฐ,

์–ด๋–ค ๋ฉ”๋ชจ๋ฆฌ์— ๋ฐ”์ธ๋”ฉ ๋œ ๋ณ€์ˆ˜๋Š” ๋”ฑ ํ•œ๊ฐœ๋งŒ ์กด์žฌํ•œ๋‹ค๋Š”๊ฑฐ๋‹ค.


GC๋ฅผ ์“ฐ๋Š” ์–ธ์–ด์—์„œ๋Š” ํ•ด๋‹น ๋ฉ”๋ชจ๋ฆฌ์˜์—ญ์„ ๋ˆ„๊ตฌ๋‚˜ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๊ณ , ๊ทธ ์ž์œ ๋กœ์šด ์ฐธ์กฐ๊ฐ€ 0๊ฐœ๊ฐ€ ๋  ๋•Œ๊ฐ€ ์–ธ์ œ์ธ์ง€๋ฅผ ์•Œ์•„๋‚ด๊ธฐ ์œ„ํ•ด ๊ฐ€๋น„์ง€์ฝœ๋ ‰ํ„ฐ๊ฐ€ ๊ทธ๋ž˜ํ”„ ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค๊ณ  ๋˜ฅ๊ผฌ์‡ผ๋ฅผ ๋‹ค ํ•˜์ง€๋งŒ?


rust์—์„œ๋Š” ๋ฉ”๋ชจ๋ฆฌ์˜์—ญ์„ ์ฐธ์กฐํ•˜๋Š” ๋ณ€์ˆ˜๊ฐ€ '์ฃผ์ธ' ํ•œ๋ช…์ด๋‹ˆ๊นŒ ๊ทธ๋ƒฅ ์ฃผ์ธ์ด ์ฐธ์กฐ๋ฅผ ๋๋‚ด๋ฉด ๋ฉ”๋ชจ๋ฆฌ๋„ ๋์ธ๊ฑฐ๋‹ค.

๊ทธ๋ž˜์„œ rust์—์„œ๋Š” ๋Œ€์ž…/๋ณต์‚ฌ์—ฐ์‚ฐ์ด ์‚ฌ์‹ค์ƒ ์ด๋™์—ฐ์‚ฐ์ฒ˜๋Ÿผ ๋™์ž‘ํ•จ.

a = b ๋ผ๋Š” ๋Œ€์ž…์—ฐ์‚ฐ์ด ์žˆ๊ณ  ๋‚œ ํ›„์—”, b๊ฐ€ ์ฐธ์กฐํ•˜๋˜ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์€ a๊บผ๊ฐ€ ๋˜์–ด๋ฒ„๋ฆฌ๊ณ  b๋Š” ๊ทธ๋ƒฅ ํŒŒ๊ธฐ๋˜์–ด๋ฒ„๋ฆฐ๋‹ค.


์ด๋ ‡๊ฒŒ ์ฆ‰์‹œ ์†Œ์œ ๊ถŒ์ด ์ด๋™๋˜๊ณ , ๋‚จ์€ ๋ณ€์ˆ˜๋Š” ํŒŒ๊ธฐ๋˜์–ด๋ฒ„๋ฆฌ๋‹ˆ ํ•ด์ œ๋œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์•„์˜ˆ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.

a = b ๊ฐ€ ์ˆ˜ํ–‰๋œ ๋’ค์— b๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋œ๋‹ค๋Š” ์‚ฌ์‹ค์€ ์ปดํŒŒ์ผ๋Ÿฌ๋„ ๋ฐ”๋กœ ์•Œ ์ˆ˜ ์žˆ๋”ฐ.

๋”ฐ๋ผ์„œ ์ปดํŒŒ์ผํƒ€์ž„์— ๋Œ•๊ธ€๋งํฌ์ธํ„ฐ ์ถ”์ ์ด ์Œ‰๊ฐ€๋Šฅ ํ•œ ๊ฒƒ.


๋Œ€์‹ ์— ์ฝ”๋“œ ์งค ๋•Œ ํž˜๋“ค์ง€๋„? ๋Ÿฌ์ŠคํŠธ๋กœ ์ฝ”๋”ฉ์•ˆํ•ด๋ด์„œ ๋ชฐ๋ฃจ

(์ด ownership๊ฐœ๋… ๋•Œ๋ฌธ์— ์ฝ”๋”ฉํ•˜๊ธฐ๊ฐ€ ๋„ˆ๋ฌด ํž˜๋“ค์–ด์„œ borrowed pointer๋ผ๋Š” ๊ฐœ๋…์„ ์‚ฌ์šฉํ•˜๊ธดํ•œ๋‹ค. ๊ทผ๋ฐ ๋‚ด๊ฐ€ ์ž˜๋ชฐ๋ฆ„ใ…Ž)



---



GC๋ฐฉ์‹์˜ ๋ฌธ์ œ์ค‘ ํ•˜๋‚˜๋Š”, '์‹ค์งˆ์ ์œผ๋กœ ์“ฐ์ด์ง„ ์•Š์ง€๋งŒ? ์ฐธ์กฐ๋Š” ๋‚จ์•„์žˆ์–ด์„œ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ•ด์ œ ์•ˆ๋จ' ์˜ ๊ฒฝ์šฐ๋‹ค.


rust์—์„œ๋Š” ์ด๊ฑธ ๋ฐฉ์ง€ํ•˜๊ธฐ์œ„ํ•ด, ๋ฉ”๋ชจ๋ฆฌ์˜ ์ˆ˜๋ช…(LifeTime) ๊ฐœ๋…์„ ๋„์ž…ํ–ˆ๋‹ค.

์Šค์ฝ”ํ”„ {}๊ฐ€ ๋๋‚˜๋ฉด ๊ทธ๋ƒฅ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฃฝ์—ฌ๋ฒ„๋ฆฌ๋Š”๊ฒƒ์ด๋‹ค.

์Šคํƒ์˜์—ญ์— ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ๋ผ๋ฉด ๋‹ค๋ฅธ์–ธ์–ด๋„ ๋‹น์—ฐํžˆ ๊ทธ๋ ‡๊ฒ ์ง€๋งŒ?

rust๋Š” ํž™์˜์—ญ์— ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ๋„ ์Šค์ฝ”ํ”„๊ฐ€ ๋๋‚˜๋ฉด ๊ทธ๋ƒฅ ์ฃฝ์—ฌ๋ฒ„๋ฆฐ๋‹ค.


๋’ค์ง€์ง€ ์•Š๊ธฐ์œ„ํ•ด์„œ๋Š”?


2๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

- return์œผ๋กœ ๋„˜๊ฒจ์ฃผ๋Š”๊ฒƒ (์ด๊ฒƒ๋„ ์‚ฌ์‹ค์ƒ ํ•จ์ˆ˜ ๋ฆฌํ„ด๊ฐ’์„ ๋ฐ›๋Š” ๋ณ€์ˆ˜๋กœ ownership์„ ์ด์ „ํ•˜๋Š” ํ–‰์œ„์ด๋‹ค)

- ์Šค์ฝ”ํ”„ ๋ฐ”๊นฅ์˜ ๊ฐ์ฒด๊ฐ€ ์†Œ์œ ๊ถŒ์„ ๊ฐ€์ ธ๊ฐ€๋Š”๊ฒƒ.


๋‘๋ฒˆ์งธ๊ฑฐ๊ฐ€ ์•ฝ๊ฐ„ ์ดํ•ด๊ฐ€ ์•ˆ๊ฐˆ ์ˆ˜ ์žˆ๋Š”๋ฐ ๋Œ€์ถฉ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.


{
//๊ฐ์ฒด A ์ƒ์„ฑ
{
//๊ฐ์ฒด B ์ƒ์„ฑ
} // <- ์›๋ž˜ B๊ฐ€ ๋’ค์ง€๋Š”์‹œ์ 
}

์›๋ž˜ ์ด๋Ÿฐ์ƒํ™ฉ์ธ๋ฐ


{
//๊ฐ์ฒด A ์ƒ์„ฑ
{
//๊ฐ์ฒด B ์ƒ์„ฑ
//๊ฐ์ฒด A์˜ ๋ฉค๋ฒ„๋ณ€์ˆ˜๋กœ ๊ฐ์ฒดB์˜ ์†Œ์œ ๊ถŒ์„ ์ด์ „
}
//๊ฐ์ฒด B (์—ฟ๋˜๊ฒƒ)์€ A์˜ ์†์— ์‚ด์•„์žˆ๋”ฐ.
}



์ด๋ ‡๊ฒŒ rust์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด์•˜๋‹ค.