๊ธ€ ์ž‘์„ฑ์ž: ๊ฐœ๋ฐœํ•˜๋Š” ํ›ˆ์ด

ARC in Swift: Basics and beyond

์˜ค๋Š˜์€ WWDC21 ์„ธ์…˜ ์ค‘์—์„œ ARC์— ๋Œ€ํ•œ ์„ธ์…˜์ด ์žˆ๊ธธ๋ž˜ ๋ฒˆ์—ญ์„ ํ•ด๋ณด๋ฉด์„œ ARC๋ฅผ ๋‹ค์‹œ ์ •๋ฆฌํ•ด๋ณด๋ ค๊ณ  ํ•ด์š”. ์˜ค์—ญ์ด๋‚˜ ์˜์—ญ์ด ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋‹ˆ ์ด ํฌ์ŠคํŠธ๊ฐ€ ์• ํ”Œ๊ณผ ์Šค์œ„ํ”„ํŠธํŒ€์˜ ๊ณต์‹์ ์ธ ๋ฐœํ‘œ๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ๋งˆ์‹œ๊ณ  ๊ผญ ์›๋ณธ ์˜์ƒ์„ ๋ณด์‹œ๋ฉด์„œ ์˜์–ด๊ฐ€ ์–ด๋ ค์šฐ์‹  ๋ถ€๋ถ„์—์„œ ์ฐธ๊ณ ๋งŒ ํ•ด์ฃผ์‹œ๋ฉด ๋  ๊ฒƒ ๊ฐ™์•„์š”! ๊ทธ๋Ÿผ ์‹œ์ž‘ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค! ๊ทธ๋‚˜์ €๋‚˜ ์š”์ฆ˜์€ ํ‚ค๋…ธํŠธ๋ฅผ ์•ˆ์˜ฌ๋ ค์ฃผ๋‚˜๋ณด๋„ค์š”ใ… 

 

ARC in Swift: Basics and beyond - WWDC21 - Videos - Apple Developer

Learn about the basics of object lifetimes and ARC in Swift. Dive deep into what language features make object lifetimes observable,...

developer.apple.com

Object Lifetimes and ARC

๋จผ์ € ๊ฐ€๋ณ๊ฒŒ ์Šค์œ„ํ”„ํŠธ์—์„œ ๊ฐ์ฒด์˜ ์ƒ๋ช…์ฃผ๊ธฐ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋˜๋Š”์ง€ ์ •๋ฆฌํ•ด๋ณผ๊ฒŒ์š”. 

 

๊ฐ์ฒด๋Š” ์ƒ์„ฑ์ž์™€ ํ•จ๊ป˜ ์‹œ์ž‘๋˜์–ด์„œ ์‚ฌ์šฉ์ด ์™„์ „ํžˆ ์™„๋ฃŒ๋˜๋ฉด ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ARC๋Š” ์ด ์ƒ๋ช…์ฃผ๊ธฐ๊ฐ€ ๋๋‚˜๋ฉด ๊ฐ์ฒด๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํ•ด์ œํ•˜๋Š” ์—ญํ• ์„ ๋‹ด๋‹นํ•˜์ฃ . ARC๊ฐ€ ๊ฐ์ฒด์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ํŒŒ์•…ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด Reference Count์ธ๋ฐ์š”, ์Šค์œ„ํ”„ํŠธ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๊ฐ์ฒด๊ฐ€ ์‹œ์ž‘๋  ๋•Œ retain ์—ฐ์‚ฐ์ž๋ฅผ ์ฝ”๋“œ์— ์‚ฝ์ž…ํ•˜๊ณ , ๊ฐ์ฒด๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ release ์—ฐ์‚ฐ์„ ์ฝ”๋“œ์— ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค.

 

์ด๋ ‡๊ฒŒ ํ•ด๋‘๋ฉด ์Šค์œ„ํ”„ํŠธ ๋Ÿฐํƒ€์ž„์€ ์–ด๋–ค ๊ฐ์ฒด์˜ Reference Count๊ฐ€ 0์ด ๋˜์—ˆ์„ ๋•Œ ๊ฐ์ฒด๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค.

 

๊ธ€๋กœ๋Š” ์ž˜ ์™€๋‹ฟ์ง€ ์•Š์ฃ ? ๋ฆฌํ…Œ์ธ, ๋ฆด๋ฆฌ์ฆˆ, ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์–ด์ฉŒ๊ตฌ.. ๋Ÿฐํƒ€์ž„์ด ์–ด์ฉŒ๊ตฌ.. 

 

์˜ˆ์‹œ์™€ ํ•จ๊ป˜ ์‚ดํŽด๋ด…์‹œ๋‹ค.

 

์ž, ์—ฌ๊ธฐ์— Traveler ํด๋ž˜์Šค์™€ ์ด ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•˜๋Š” test๋ผ๋Š” ํ•จ์ˆ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

 

test ํ•จ์ˆ˜ ์•ˆ์—์„œ๋Š” traveler1 ์ด๋ผ๋Š” ๋ณ€์ˆ˜์— Traveler ๊ฐ์ฒด์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“ค์–ด ํ• ๋‹นํ•˜๊ณ , traveler2์— traveler1์˜ ๊ฐ’์„ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  traveler2 ๋ณ€์ˆ˜๊ฐ€ ๊ฐ€์ง„ ๊ฐ’์— ์ ‘๊ทผํ•ด destination ํ”„๋กœํผํ‹ฐ์— ์ƒˆ๋กœ์šด ๊ฐ’์„ ํ• ๋‹นํ•ด์ฃผ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿผ ์—ฌ๊ธฐ์„œ ์ƒ๋ช…์ฃผ๊ธฐ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”? traveler1์˜ ์ฐธ์กฐ๋Š” Traveler ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑ ํ–ˆ์„ ๋•Œ ์‹œ์ž‘๋˜๊ณ , traveler2 ์— travler1์„ ๋ณต์‚ฌํ•œ ๋’ค์— ์‚ฌ์šฉ์ด ์ข…๋ฃŒ๋˜์–ด์š”.

 

์ฐธ์กฐ๋ฅผ ํ•ด์ œํ•˜์ง€ ์•Š์•˜๋Š”๋ฐ ์™œ END ๋ผ๊ณ  ํ‘œํ˜„ํ•˜๋Š”์ง€ ํ—ท๊ฐˆ๋ฆฌ์‹œ์ฃ ? '์‚ฌ์šฉ'์ด๋ผ๋Š” ๊ด€์ ์—์„œ ๋ณด์•˜์„ ๋•Œ, travler1์€ ์‚ฌ์šฉ์ด ์ข…๋ฃŒ๋œ๊ฑฐ์˜ˆ์š”. ์•„๊นŒ ๊ฐ์ฒด์˜ ์ƒ๋ช…์ฃผ๊ธฐ์— ๋Œ€ํ•ด ์ •๋ฆฌํ•  ๋•Œ "์‚ฌ์šฉ์ด ์™„๋ฃŒ๋˜๋ฉด ์ข…๋ฃŒ"๋ผ๊ณ  ์ •์˜ ํ–ˆ์—ˆ์–ด์š” ๐Ÿ˜Ž

 

 ์ด์ œ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๊ฒŒ์œผ๋ฅธ ์šฐ๋ฆฌ ๋Œ€์‹ ์— ์‚ฌ์šฉ์ด ์™„๋ฃŒ๋œ traveler์˜ ์ฝ”๋“œ ์•„๋ž˜์— release ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด์ค๋‹ˆ๋‹ค.

 

retain์€ ์™œ ์—†๋ƒ๊ตฌ์š”? ์ƒ์„ฑ์ž๋Š” reference count๋ฅผ 1๋กœ ์„ค์ •ํ•˜๊ฑฐ๋“ ์š”. ๊ทธ๋ž˜์„œ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ด ์ฝ”๋“œ์—์„œ๋Š” ๋”ฐ๋กœ retain์„ ๋„ฃ์–ด์ค„ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

 

๋‹ค์Œ์€ ์ด ์ฝ”๋“œ์— ํ•˜๋‚˜ ๋” ์žˆ๋Š” ๊ฐ์ฒด์ธ traveler2 ๊ฐ์ฒด๋ฅผ ๋ด…์‹œ๋‹ค. ์ด๋ฒˆ์—๋Š” ์ƒ์„ฑ์ž๊ฐ€ ์•„๋‹ˆ๋ผ ํ• ๋‹น์„ ํ†ตํ•ด์„œ ์ƒˆ๋กœ์šด ์ฐธ์กฐ๋ฅผ ๋งŒ๋“ค์—ˆ์ฃ ? ์ด ์ˆœ๊ฐ„์— ์ฐธ์กฐ๊ฐ€ ์‹œ์ž‘๋˜๊ณ , destination ํ”„๋กœํผํ‹ฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋ฉด ์ฐธ์กฐ๊ฐ€ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

 

๋”ฐ๋ผ์„œ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ด๋ ‡๊ฒŒ retain๊ณผ release ์ฝ”๋“œ๋ฅผ ์‚ฝ์ž…ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

์ž ์ด์ œ ์ปดํŒŒ์ผ๋Ÿฌ์˜ ์—ญํ• ์€ ๋๋‚ฌ์Šต๋‹ˆ๋‹ค. ๋Ÿฐํƒ€์ž„์œผ๋กœ ์ด๋™ํ•ด์„œ ์–ด๋–ค ์ผ๋“ค์ด ์ผ์–ด๋‚˜๋Š”์ง€ ๋ด…์‹œ๋‹ค.

 

Traveler ๊ฐ์ฒด์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋˜์–ด์„œ ํž™์— ์ €์žฅ๋˜์—ˆ๊ณ , ์ด์™€ ํ•จ๊ป˜ Reference count ๊ฐ€ 1๋กœ ์„ค์ •๋˜์—ˆ์–ด์š”.

 

๊ทธ๋ฆฌ๊ณ  ๋‹ค์Œ ๋ผ์ธ์— ์žˆ๋Š” retain ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด, Reference count๊ฐ€ ์ฆ๊ฐ€ํ•ด 2๊ฐ€ ๋˜์ฃ .

 

๊ทธ๋ฆฌ๊ณ  ์ด์ œ traveler2๋„ Traveler ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

์ด์ œ traveler1์˜ ์‚ฌ์šฉ์ด ๋๋‚ฌ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋„ฃ์–ด์ค€ releasae ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ณ , reference count๋Š” 1๋กœ ์ค„์–ด๋“ญ๋‹ˆ๋‹ค.

 

๊ทธ ๋‹ค์Œ์—๋Š” destination ํ”„๋กœํผํ‹ฐ๋ฅผ ์—…๋ฐ์ดํŠธ ํ•˜๊ณ ,

 

์ด์ œ traveler2์˜ ์‚ฌ์šฉ์ด ๋๋‚ฌ๋„ค์š”. reference count๋ฅผ ํ•˜๋‚˜ ์ค„์ด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

Reference count๊ฐ€ 0์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค! ๊ทธ๋Ÿผ ์ด๋•Œ๋Š” ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํ•ด์ œํ•  ์ˆ˜ ์žˆ๊ฒŒ๋ฉ๋‹ˆ๋‹ค.

 

์ค‘์š”ํ•œ ๋ถ€๋ถ„์ด๋ผ์„œ ๋‹ค์‹œ ์„ค๋ช…ํ•ด์ฃผ์‹œ๋Š” ๊ฒƒ ๊ฐ™์•„์š”! ์Šค์œ„ํ”„ํŠธ์˜ ๊ฐ์ฒด ์ƒ๋ช…์ฃผ๊ธฐ๋Š” Use-based ์ž…๋‹ˆ๋‹ค. ์ฆ‰, ์‚ฌ์šฉ์„ ์–ธ์ œ ์‹œ์ž‘ํ•˜๊ณ  ์ข…๋ฃŒ๋˜๋Š”์ง€์— ๋”ฐ๋ผ์„œ retain๊ณผ release์˜ ์‹œ์ ์ด ๊ฒฐ์ •๋œ๋‹ค๋Š” ๊ฑฐ์˜ˆ์š”. ์ด๋Ÿฐ ๋ฐฉ์‹์€ C++ ๊ฐ™์€ ๋‹ค๋ฅธ ์–ธ์–ด๋“ค๊ณผ๋Š” ์™„์ „ํžˆ ๋‹ค๋ฅธ๋ฐ์š”, ์Šค์œ„ํ”„ํŠธ๋Š” ๋ธ”๋ก์ด ์ข…๋ฃŒ๋  ๋•Œ ๊ฐ์ฒด์˜ ์ข…๋ฃŒ๋ฅผ ๋ณด์žฅํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

์Šค์œ„ํ”„ํŠธ๋Š” retain๊ณผ release๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ฐ์ฒด๋ฅผ ํ•ด์ œํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•จ์ˆ˜๊ฐ€ ์ข…๋ฃŒ๋˜์ง€ ์•Š์•„๋„ ๊ฐ์ฒด๊ฐ€ ํ•ด์ œ๋  ์ˆ˜ ์žˆ์ฃ . ๋ฐฉ๊ธˆ ์˜ˆ์‹œ์—์„œ ๋ณธ ๊ฒƒ ์ฒ˜๋Ÿผ์š”.

 

๊ทธ๋ฆฌ๊ณ  ARC ์ตœ์ ํ™”์— ๋”ฐ๋ผ์„œ ์œ„ ๋ฐฉ์‹์ด ์•„๋‹ˆ๋ผ ๋งˆ์ง€๋ง‰์œผ๋กœ ์‚ฌ์šฉ๋˜๊ณ  ๊ฝค ์ง€๋‚œ ์ดํ›„์— ๊ฐ์ฒด๊ฐ€ ํ•ด์ œ๋  ์ˆ˜๋„ ์žˆ์–ด์š”. 

 

๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ์—๋Š” ๊ฐ์ฒด์˜ ์ƒ๋ช…์ฃผ๊ธฐ๊ฐ€ ์ •ํ™•ํžˆ ์–ด๋–ป๊ฒŒ ๋˜๋Š”์ง€ ์ค‘์š”ํ•˜์ง€๋Š” ์•Š์•„์š”. ํ•˜์ง€๋งŒ weak๋‚˜ unowned๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ deinitializer๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ์–ด์š”. ์ € ์นœ๊ตฌ๋“ค์€ ๊ฐ์ฒด์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ์ง€์ผœ๋ณด๋Š” ์นœ๊ตฌ๋“ค์ด๊ธฐ ๋•Œ๋ฌธ์— ์ •ํ™•ํžˆ ์–ธ์ œ ํ•ด์ œ๋˜๋Š”์ง€๊ฐ€ ์ค‘์š”ํ•˜๋‹ˆ๊นŒ์š”.

 

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

 

Observable object lifetimes

 ์ด์ œ ์ข€ ๋” ๋”ฅํ•˜๊ฒŒ ๋“ค์–ด๊ฐ€๋ณผ๊ฒŒ์š”. ๊ฐ์ฒด์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๊ด€์ฐฐ ๊ฐ€๋Šฅํ•˜๋„๋ก ๋งŒ๋“œ๋Š” ์š”์†Œ๋“ค์„ ์•Œ์•„๋ณผํ…๋ฐ์š”, ์šฐ๋ฆฌ๊ฐ€ ๊ฐ์ฒด์˜ ์ƒ๋ช…์ฃผ๊ธฐ์— ์˜์กดํ•˜๋ฉด ์–ด๋–ค ์ผ๋“ค์ด ์ผ์–ด๋‚˜๋Š”์ง€ ์•Œ์•„๋ณด๊ณ , ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ์„ ๋•Œ ์ด๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ์•ˆ์ „ํ•œ ๊ธฐ๋ฒ•๋“ค๋„ ์†Œ๊ฐœํ• ๊ฑฐ์˜ˆ์š”.

 

๋จผ์ € weak๊ณผ unowned ๋ถ€ํ„ฐ ์†Œ๊ฐœํ• ๊ฒŒ์š”. ์•ฝํ•œ ์ฐธ์กฐ์™€ ๋ฏธ์†Œ์œ  ์ฐธ์กฐ๋Š” reference counting์— ๊ด€์—ฌํ•˜์ง€ ์•Š์•„์š”. ์ฆ‰, reference count๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ด์ฃ . ๊ทธ๋ž˜์„œ ์ด ์นœ๊ตฌ๋“ค์€ ์ฐธ์กฐ ์‚ฌ์ดํด(reference cycle) ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ”ํ•˜๊ฒŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. 

 

๋” ์ž์„ธํ•˜๊ฒŒ ์ด์•ผ๊ธฐ ํ•˜๊ธฐ ์ „์—, ์ฐธ์กฐ ์‚ฌ์ดํด์ด ๋ฌด์—‡์ธ์ง€๋ถ€ํ„ฐ ์งš์ž๊ตฌ์š”.

 

์•„๊นŒ ๋งŒ๋“ค์—ˆ๋˜ Traveler๊ฐ€ ์กฐ๊ธˆ ๋” ํ™•์žฅ๋˜์—ˆ์–ด์š”. ์ด์ œ account๋ผ๋Š” ํ”„๋กœํผํ‹ฐ๊ฐ€ ์ถ”๊ฐ€ ๋˜์—ˆ๊ณ , account๋ฅผ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ Account ํด๋ž˜์Šค๋„ ๋งŒ๋“ค์–ด์กŒ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด ๋‘˜์€ ์„œ๋กœ๋ฅผ ํ”„๋กœํผํ‹ฐ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์š”.

 

์ƒˆ๋กœ์šด test ํ•จ์ˆ˜๋„ ์ถ”๊ฐ€๋˜์—ˆ๋Š”๋ฐ์š”, ์—ฌ๊ธฐ์„œ๋Š” Traveler ์ธ์Šคํ„ด์Šค์™€ Account ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค๊ณ , Traveler ์ธ์Šคํ„ด์Šค์— Account๋ฅผ ํ• ๋‹นํ•ด์ฃผ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋งˆ์ง€๋ง‰์œผ๋กœ ์ •๋ณด๋ฅผ ์ถœ๋ ฅํ•˜๊ณ  ์ข…๋ฃŒ๋˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. 

 

์ด์ œ ARC์—์„œ ์–ด๋–ค ์ผ์ด ์ผ์–ด๋‚˜๋Š”์ง€ ๋ณผ๊นŒ์š”?

 

๋จผ์ € Traveler ์ธ์Šคํ„ด์Šค๊ฐ€ ๋งŒ๋“ค์–ด์ง€๋ฉด์„œ reference count๊ฐ€ 1์ธ์ฑ„๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  Account ์ธ์Šคํ„ด์Šค๊ฐ€ ๋งŒ๋“ค์–ด์ง€๋ฉด์„œ ์ž์‹ ์˜ reference count๋ฅผ 1๋กœ ๋งŒ๋“ค๋ฉฐ ์ƒ์„ฑ๋˜๊ณ , ์›๋ž˜ ์žˆ๋˜ traveler ๋ณ€์ˆ˜๋ฅผ ๋‚ด๋ถ€ ํ”„๋กœํผํ‹ฐ์— ํ• ๋‹นํ•˜๋ฉด์„œ traveler ๊ฐ์ฒด์˜ reference count๊ฐ€ 2๋กœ ์ฆ๊ฐ€ํ•˜๊ฒŒ ๋˜์ฃ .

 

๊ทธ๋ฆฌ๊ณ  traveler์˜ account ํ”„๋กœํผํ‹ฐ์— ์ ‘๊ทผํ•ด ์ธ์Šคํ„ด์Šค๋ฅผ ํ• ๋‹นํ–ˆ์œผ๋‹ˆ account ๊ฐ์ฒด์˜ reference count๊ฐ€ ์ฆ๊ฐ€ํ•ด 2๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

 

account์˜ ์‚ฌ์šฉ์ด ์ข…๋ฃŒ๋˜์—ˆ์œผ๋‹ˆ traveler.count = account๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด Account์˜ ์นด์šดํŠธ๊ฐ€ ํ•˜๋‚˜ ์ค„์–ด๋“ค๊ณ , ๋งˆ์ง€๋ง‰์œผ๋กœ traveler ๋ณ€์ˆ˜์—์„œ printSummary๋ฅผ ํ•˜๋ฉด ์‚ฌ์šฉ์ด ์™„๋ฃŒ๋˜์–ด ์นด์šดํŠธ๊ฐ€ ํ•˜๋‚˜ ๋” ์ค„์–ด๋“ญ๋‹ˆ๋‹ค.

 

์ด์ œ ๋‘ ์ธ์Šคํ„ด์Šค์˜ ์‚ฌ์šฉ์ด ๋ชจ๋‘ ์™„๋ฃŒ๋˜์–ด์„œ Reference count๊นŒ์ง€ ๋ชจ๋‘ ์ •๋ฆฌ๊ฐ€ ๋˜์—ˆ๋Š”๋ฐ, ํž™์˜ ๋‘ ์ธ์Šคํ„ด์Šค๋Š” ์—ฌ์ „ํžˆ ์นด์šดํŠธ๋ฅผ 1๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋„ค์š”. ์ด๋Ÿฐ ์ƒํ™ฉ์„ ์ฐธ์กฐ ์‚ฌ์ดํด์ด๋ผ๊ณ  ํ•˜๊ณ , ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๋‘ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ ˆ๋Œ€ ํ•ด์ œ๋˜์ง€ ์•Š์•„ Memory Leak์˜ ์›์ธ์ด ๋ฉ๋‹ˆ๋‹ค.

 

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด weak์ด๋‚˜ unonwned ์˜€์ฃ . Reference Count์— ๊ด€์—ฌํ•˜์ง€ ์•Š์œผ๋‹ˆ๊นŒ์š”. weak์œผ๋กœ ์„ ์–ธ๋œ ๊ฐ์ฒด๋Š” ์ฐธ์กฐ๊ฐ€ ๋˜์—ˆ์„ ๋•Œ nil์„ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๊ณ , unonwed ๋Š” ํŠธ๋žฉ์„ ๋ฐœ์ƒ์‹œ์ผœ ๋Ÿฐํƒ€์ž„์—๋Ÿฌ๋ฅผ ๋งŒ๋“ค๊ฒŒ๋ฉ๋‹ˆ๋‹ค.

 

Account ํด๋ž˜์Šค์˜ traveler ํ”„๋กœํผํ‹ฐ๋ฅผ weak์œผ๋กœ ๋ฐ”๊ฟ”๋ณผ๊ฒŒ์š”.

 

๋งˆ์ง€๋ง‰์œผ๋กœ traveler๋ฅผ ์‚ฌ์šฉํ•˜๊ณ ๋‚˜๋ฉด Traveler์˜ ์นด์šดํŠธ๊ฐ€ 0์ด ๋˜๊ฒ ์ฃ ? ์ด์ œ Account ๋Š” Traveler๊ฐ€ ์‚ฌ๋ผ์ง€๋ฉด์„œ ์นด์šดํŠธ๊ฐ€ 0์ด ๋˜๊ณ  ๋‘ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋ชจ๋‘ ์•ˆ์ „ํ•˜๊ฒŒ ํ•ด์ œ๋ฉ๋‹ˆ๋‹ค.

 

์ด๋ฒˆ์—” ์ข€ ๋‹ค๋ฅธ ์ƒํ™ฉ์€ ํ•œ ๋ฒˆ ๋ณผ๊ฒŒ์š”. ์ด๋ฒˆ์—๋Š” printSummary๋ฅผ account์—์„œ ํ•ด์ฃผ๊ณ  ์žˆ์–ด์š”. ์–ด์ฉŒ๋ฉด ์ด ์ฝ”๋“œ๋Š” ์•„๋ฌด ๋ฌธ์ œ์—†์ด ์ž˜ ์‹คํ–‰๋  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

ํ•˜์ง€๋งŒ ๊ทธ๋Ÿฐ ์ƒํ™ฉ์€ ๋‹จ์ˆœํžˆ ์šฐ์—ฐ์ผ ๋ฟ์ด์ฃ ..

 

Traveler ๊ฐ์ฒด๊ฐ€ ๋ชจ๋‘ ์‚ฌ์šฉ๋œ ์ดํ›„์˜ ์ƒํ™ฉ์„ ์ƒ๊ฐํ•ด๋ณผ๊ฒŒ์š”.

 

traveler ๊ฐ์ฒด์˜ ์‚ฌ์šฉ์€ account๊ฐ€ printSummary ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์ „์— ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๊ธฐ ์ „์— Traveler ์ธ์Šคํ„ด์Šค์˜ ์นด์šดํŠธ๊ฐ€ 0์ด ๋˜์–ด์„œ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํ•ด์ œ๋  ์ˆ˜๋„ ์žˆ๋Š” ๊ฒƒ์ด์ฃ .

 

๋งŒ์•ฝ ๊ทธ๋ ‡๋‹ค๋ฉด weak ์œผ๋กœ ์„ ์–ธ๋œ ํ”„๋กœํผํ‹ฐ์—๋Š” nil์ด ๋“ค์–ด๊ฐ€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

์ด๋Ÿฐ ์ƒํ™ฉ์—์„œ traver.name์„ ๊ฐ•์ œ์–ธ๋ž˜ํ•‘ํ•ด์„œ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•œ๋‹ค๋ฉด ํฌ๋ž˜์‹œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

 

๋ฌผ๋ก  ์˜ต์…”๋„ ๋ฐ”์ธ๋”ฉ์œผ๋กœ ํฌ๋ž˜์‹œ๋Š” ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ํฌ๋ž˜์‹œ๋งŒ ์•„๋‹ ๋ฟ ์ด๋Ÿฐ ์ฝ”๋“œ๋Š” ์—ฌ์ „ํžˆ ๋ฒ„๊ทธ์ž…๋‹ˆ๋‹ค.

 

์ด๋ฒˆ์—๋Š” weak๊ณผ unowned๋ฅผ ๋” ์•ˆ์ „ํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ์ˆ ์ธ withExtendedLifetime์„ ์†Œ๊ฐœํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

์Šค์œ„ํ”„ํŠธ๋Š” withExtendedLifetime์ด๋ผ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•˜๋Š”๋ฐ์š”, ๋ช…์‹œ์ ์œผ๋กœ ํŠน์ •ํ•œ ๊ฐ์ฒด์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๋Š˜๋ฆฌ๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์œ„ ์˜ˆ์‹œ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•˜๋ฉด, traveler ์ธ์Šคํ„ด์Šค์˜ ์ƒ๋ช…์ฃผ๊ธฐ๊ฐ€ printSummary๊ฐ€ ๋๋‚ ๋•Œ๊นŒ์ง€๋กœ ์—ฐ์žฅ๋˜์ฃ .

 

ํ•จ์ˆ˜ ์Šค์ฝ”ํ”„ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด์„œ ๊ฐ™์€ ํšจ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋” ๋ณต์žกํ•œ ์ƒํ™ฉ์—์„œ๋Š” defer ์•ˆ์— withExtendedLifetime์„ ๋„ฃ์–ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.(์™€.. ์—ฌ๊ธฐ์„œ ์†Œ๋ฆ„๋‹์•˜์–ด์š”..)

 

์ด ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜๋ฉด ์‰ฝ๊ฒŒ ๊ฐ์ฒด์˜ ์ƒ๋ช…์ฃผ๊ธฐ์— ๋Œ€ํ•œ ๋ฒ„๊ทธ๋ฅผ ์žก์„ ์ˆ˜ ์žˆ์ง€๋งŒ, ๋‹จ๋‹จํ•œ ๊ธฐ์ˆ ์€ ์•„๋‹™๋‹ˆ๋‹ค(fragile์ด๋ผ๊ณ  ํ•˜์…จ๋Š”๋ฐ ํ—›์ ์ด ๋งŽ๋‹ค๊ณ  ํ•ด์„ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์•„์š”.). ๊ทธ๋ฆฌ๊ณ  ARC๊ฐ€ ํ•˜๋˜ ์ฑ…์ž„์„ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋– ๋„˜๊ธฐ๊ฒŒ ๋˜์ฃ .

 

์ด๋Ÿฐ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์•ฝํ•œ ์ฐธ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ์ฝ”๋“œ์— ์ฐพ์•„๊ฐ€ ์ฝ”๋“œ๋ฅผ ๋„ฃ์–ด์ฃผ์–ด์•ผ ํ•˜๊ณ , ์ด๊ฑด ๋„ˆ๋ฌด ํฐ ์œ ์ง€๋น„์šฉ์„ ์š”๊ตฌํ•ฉ๋‹ˆ๋‹ค.

 

๋” ์ข‹์€ ๋ฐฉ๋ฒ•์€ ํด๋ž˜์Šค๋ฅผ ๋” ๋‚˜์€ API๋“ค๋กœ ์„ค๊ณ„ํ•˜๋Š”๊ฑฐ์˜ˆ์š”.

 

๊ฐ์ฒด์˜ ์ƒ๋ช…์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋Š” ๋งŒ์•ฝ ๊ฐ์ฒด์— ์–ด๋”˜๊ฐ€์—์„œ ์ ‘๊ทผ์„ ๋ฐ›๋Š” ๊ฐ์ฒด๊ฐ€ ๋ชจ๋‘ ๊ฐ•ํ•œ ์ฐธ์กฐ๋ผ๋ฉด ์˜ˆ๋ฐฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. 

 

์ด ์ฝ”๋“œ์—์„œ๋Š” printSummary๋ฅผ ๋‹ค์‹œ traveler๋กœ ์˜ฎ๊ฒจ์ฃผ์—ˆ์–ด์š”. ๊ทธ๋ฆฌ๊ณ  Account์˜ traveler ์ธ์Šคํ„ด์Šค๋Š” ์™ธ๋ถ€์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋„๋ก ์ˆจ๊ฒจ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

 

์ด์ œ printTest ๋ฉ”์„œ๋“œ๋Š” ๋ฐ˜๋“œ์‹œ Account๋ฅผ ํ†ตํ•ด์„œ๋งŒ ํ˜ธ์ถœ์ด ๋˜์–ด์•ผ ํ•˜๊ณ  ์ด๊ฒƒ์€ ์ž ์žฌ์ ์ธ ๋ฒ„๊ทธ๋ฅผ ํ•ด๊ฒฐํ•ด์ค๋‹ˆ๋‹ค. 

 

๋‹จ์ˆœํžˆ ์„ฑ๋Šฅ์˜ ์ด์Šˆ๋ฅผ ๋– ๋‚˜์„œ weak์ด๋‚˜ unowned๋Š” ์ž ์žฌ์ ์ธ ๋ฒ„๊ทธ๋ฅผ ์œ ๋ฐœํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๋Ÿฌ๋ถ„๋“ค์€ ํด๋ž˜์Šค๋ฅผ ์‹ ์ค‘ํ•˜๊ฒŒ ์„ค๊ณ„ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. 

 

weak ์ด๋‚˜ unowned๊ฐ€ ์™œ ํ•„์š”ํ•œ์ง€, ๋‹จ์ˆœํžˆ ์ฐธ์กฐ ์‚ฌ์ดํด์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋งŒ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”์ง€ ์ƒ๊ฐํ•ด๋ณด์„ธ์š”. ์ฐธ์กฐ ์‚ฌ์ดํ‚‡์€ ํด๋ž˜์Šค๋“ค์˜ ์ˆœํ™˜๊ด€๊ณ„๋ฅผ ํŠธ๋ฆฌ๊ตฌ์กฐ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์„ ํ†ตํ•ด์„œ ํ•ด๊ฒฐ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

 

์šฐ๋ฆฌ์˜ ์˜ˆ์‹œ์—์„œ๋Š” Traveler ํด๋ž˜์Šค๊ฐ€ Account ํด๋ž˜์Šค๋ฅผ ์ฐธ์กฐํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์‚ฌ์‹ค Account ํด๋ž˜์Šค๋Š” Traveler ํด๋ž˜์Šค์˜ ์‚ฌ์šฉ์ž ์ •๋ณด์—๋งŒ ์ ‘๊ทผํ•˜๋ฉด ๋˜์ฃ .

 

๊ทธ๋ ‡๋‹ค๋ฉด ์šฐ๋ฆฌ๋Š” Traveler ํด๋ž˜์Šค๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋˜ ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ PersonalInfo๋ผ๋Š” ๋ณ„๋„์˜ ํด๋ž˜์Šค๋กœ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํด๋ž˜์Šค๋ฅผ Traveler์™€ Account๋Š” ์ด ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋ฅผ ์ฐธ์กฐํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋˜์ฃ . ์ด ๊ณผ์ •์—์„œ Account ํด๋ž˜์Šค๋Š” ๋”์ด์ƒ Traveler ํด๋ž˜์Šค๋ฅผ ์ฐธ์กฐํ•˜์ง€ ์•Š์•„๋„ ๋˜๊ณ , ์ฐธ์กฐ์‚ฌ์ดํด ๋ฌธ์ œ๊ฐ€ weak์ด๋‚˜ unowned๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ํ•ด์†Œ๋ฉ๋‹ˆ๋‹ค.

 

์ด๋ ‡๊ฒŒ ํด๋ž˜์Šค๋ฅผ ๋‹ค์‹œ ๋””์ž์ธํ•˜๊ฒŒ ๋˜๋ฉด ๊ตฌํ˜„๋น„์šฉ์ด ๋” ๋ฐœ์ƒํ•˜๊ฒŒ ๋ ๊ฑฐ์˜ˆ์š”. ํ•˜์ง€๋งŒ ์ด ๋ฐฉ๋ฒ•์ด ๊ฐ์ฒด ์ƒ๋ช…์ฃผ๊ธฐ์™€ ๊ด€๋ จ๋œ ๋ฒ„๊ทธ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ํ™•์‹คํ•œ ๋ฐฉ๋ฒ•์ด ๋ฉ๋‹ˆ๋‹ค.

 

๊ฐ์ฒด์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋˜ ๋‹ค๋ฅธ ๋ฌธ์ œ๋Š” Deinitializer์™€ ๊ด€๋ จ๋œ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. Deinitializer๋Š” ๊ฐ์ฒด๊ฐ€ ํ•ด์ œ๋˜๊ธฐ ์ง์ „์— ํ˜ธ์ถœ๋˜๋Š”๋ฐ์š”, ์ด๋ฒˆ์—๋„ ๊ฐ์ฒด์˜ ์ƒ๋ช…์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์ž ์žฌ์ ์ธ ๋ฒ„๊ทธ๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋ฒ„๊ทธ์— ๋Œ€ํ•ด์„œ ๋” ์ž์„ธํžˆ ๋ณด๊ธฐ์ „์—, Deinitializer๊ฐ€ ๋ฌด์—‡์ธ์ง€๋ถ€ํ„ฐ ์‚ดํŽด๋ณด์ž๊ตฌ์š”.

 

์•„๊นŒ์™€ ๊ฐ™์€ ์˜ˆ์ œ์ด์ง€๋งŒ ์ด๋ฒˆ์—๋Š” Deinitializer๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

 

์šฐ๋ฆฌ๊ฐ€ ๊ธฐ๋Œ€ํ•˜๋Š”๊ฑด ์•„๋งˆ Done traveling ์ดํ›„์— Deinitializer๊ฐ€ ํ˜ธ์ถœ๋˜์–ด์„œ ์ถ”๊ฐ€์ ์ธ ์ถœ๋ ฅ์ด ๋‚˜์˜ค๋Š” ๊ฒƒ์ด๊ฒ ์ฃ ?

 

ํ•˜์ง€๋งŒ ์–ด๋–ค ๊ฒฝ์šฐ์—๋Š” Deinitializer๊ฐ€ "Done Traveling"์ด์ „์— ์ถœ๋ ฅ๋  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด traveler2 ๊ฐ์ฒด์˜ ์‚ฌ์šฉ์ด ์ถœ๋ ฅ๋ฌธ ์ด์ „์— ๋๋‚ฌ์œผ๋‹ˆ๊นŒ์š”.

 

์ด๋Ÿฐ ๊ฒฝ์šฐ์—๋Š” ์™ธ๋ถ€์— ์˜ํ–ฅ์„ ์ฃผ์ง€๋Š” ์•Š์œผ๋‹ˆ๊นŒ ํฐ ๋ฌธ์ œ๋Š” ์—†๊ฒ ์ฃ ? ํ•˜์ง€๋งŒ ์ด๋Ÿฐ ๊ฒฝ์šฐ๋Š” ์–ด๋–จ๊นŒ์š”?

 

๋” ๋ณต์žกํ•œ ์ผ€์ด์Šค์ž…๋‹ˆ๋‹ค. ์ด์ œ TravelMetrics๋ผ๋Š” ์™ธ๋ถ€ ํด๋ž˜์Šค์— ๋Œ€ํ•œ ์˜์กด์„ฑ์ด ์ถ”๊ฐ€๋˜์—ˆ์–ด์š”. Traveler๊ฐ์ฒด๋Š” ํ•ด์ œ๋˜๋ฉด์„œ ์ด TravelMetrics๊ฐ์ฒด์˜ publish๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ์ด๋•Œ traveler์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ๋ฐœํ–‰๋˜๋Š” ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

 

ํ…Œ์ŠคํŠธ ํ•จ์ˆ˜์—์š”. ๊ฐ ๊ฐ์ฒด๋ฅผ ์„ค์ •ํ•œ ๋’ค์— ๋ชฉ์ ์ง€๋ฅผ ์„ค์ •ํ•˜๊ณ  computeTravelInterest๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด, ์—…๋ฐ์ดํŠธํ•œ ๋ชฉ์ ์ง€์— ๋”ฐ๋ผ ์นดํ…Œ๊ณ ๋ฆฌ๊ฐ€ ๋ถ€์—ฌ๋˜๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค์ž…๋‹ˆ๋‹ค.

 

์šฐ๋ฆฌ๋Š” ๋‘ ๋ชฉ์ ์ง€๋ฅผ ๋„ฃ์—ˆ๊ณ  ์ด์— ๋Œ€ํ•ด์„œ Natrue๋ผ๋Š” ์นดํ…Œ๊ณ ๋ฆฌ๊ฐ€ ์ƒ์„ฑ๋˜๊ธฐ๋ฅผ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค.

 

ํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ traveler ๊ฐ์ฒด์˜ ์‚ฌ์šฉ์€ ๊ณ„์‚ฐ์„ ํ˜ธ์ถœํ•˜๋Š” ํ•จ์ˆ˜ ์ด์ „์— ์ข…๋ฃŒ๋˜๊ณ , ์ด๋•Œ deninitializer๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด์„œ publish ๋ฉ”์„œ๋“œ๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. 

 

์•„์ง computeTravelInterest๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š์•„์„œ ์นดํ…Œ๊ณ ๋ฆฌ๊ฐ€ ๋ถ€์—ฌ๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์นดํ…Œ๊ณ ๋ฆฌ์— nil์ด ๋“ค์–ด๊ฐ€๋Š” ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

 

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

 

์ด๋ฒˆ์—๋„ ๋กœ์ง์„ ์žฌ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์„ ์ˆ˜ ์žˆ๊ฒ ์ฃ ? denitializer์— ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ๋ถ€์—ฌํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ publish์™€ ํ•จ๊ป˜ ๋„ฃ์„ ์ˆ˜ ์žˆ๊ฒ ์ง€๋งŒ ๊ทผ๋ณธ์ ์ธ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์€ ์•„๋‹™๋‹ˆ๋‹ค. 

 

์ด๋ฒˆ์— ์‹œ๋„ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ deinitializer์—๋Š” ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๋„ฃ์ง€ ์•Š๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋Œ€์‹  ํ…Œ์ŠคํŠธ ํ•จ์ˆ˜์— defer๋ฅผ ๋„ฃ์–ด์„œ ํ•จ์ˆ˜๊ฐ€ ์ข…๋ฃŒ๋˜๊ธฐ ์ง์ „์— ํ˜ธ์ถœํ•ด์ค„ ์ˆ˜ ์žˆ์ฃ . ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ์ž‘์—…์ด ๊ฐ์ฒด์˜ ์ƒ๋ช…์ฃผ๊ธฐ์— ์˜์กดํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋ฌธ์ œ๋ฅผ ์˜ˆ๋ฐฉํ•  ์ˆ˜ ์žˆ๊ฒŒ๋ฉ๋‹ˆ๋‹ค.

 

XCode13์˜  ์Šค์œ„ํ”„ํŠธ ์ปดํŒŒ์ผ๋Ÿฌ ์„ธํŒ…์— Optimize Object Lifetime์— ๋Œ€ํ•œ ์ตœ์ ํ™”๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์–ด์š”. ์ด ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ์ฒด๋“ค์ด ์‚ฌ์šฉ์ด ๋๋‚ฌ์„ ๋•Œ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํ•ด์ œ๋˜๋Š” ๊ฒƒ์ด ๋” ์ผ๊ด€์„ฑ์žˆ๊ฒŒ ์ง€์›๋ฉ๋‹ˆ๋‹ค. 

 

๊ทธ๋Ÿฌ๋ฉด ์ƒ๋ช…์ฃผ๊ธฐ์™€ ๊ด€๋ จํ•œ ์ž ์žฌ์ ์ธ ๋ฒ„๊ทธ๋“ค์„ ๋” ์‰ฝ๊ฒŒ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๊ฒ ์ฃ !

 

๋!

 

๋งˆ๋ฌด๋ฆฌ

๋ณด๋Š” ๋‚ด๋‚ด ๋„ˆ๋ฌด ์œ ์ตํ•˜๊ณ  ์žฌ๋ฏธ์žˆ๋Š” ์„ธ์…˜์ด์—ˆ์–ด์š”..! ARC์— ๋Œ€ํ•ด์„œ ์ž˜ ๋ชจ๋ฅธ๋‹ค๊ณ  ๋Š๋‚€๊ฒŒ ์ €๋Š” ๊ทธ๋ƒฅ ์ฐธ์กฐ๋ฅผ ํ•ด์ œํ•˜๋Š” ์ฝ”๋“œ ๋’ค์— release๊ฐ€ ๋“ค์–ด๊ฐ€๋Š” ์ค„ ์•Œ์•˜๊ฑฐ๋“ ์š”.. ๊ทผ๋ฐ Use-Based ์˜€๋‹ค๋Š” ๊ฒƒ์— ์•„์ง ๋ฐฐ์šธ๊ฒŒ ๋” ๋งŽ๋‹ค๊ณ  ๋Š๊ผˆ์Šต๋‹ˆ๋‹ค.. ๊ทธ๋ฆฌ๊ณ  ์• ํ”Œ ๊ฐœ๋ฐœ์ž๋“ค์˜ ์šฐ์•„ํ•œ defer ์‚ฌ์šฉ๋„ ๊ทธ๋ ‡๊ณ .. ๋ฌด์ง€์„ฑ weak, unowned๊ฐ€ ์•„๋‹ˆ๋ผ ์„ค๊ณ„๊ฐ€ ๋งž๋Š”์ง€ ๊ณ ๋ฏผํ•ด๋ณด๋ผ๋Š” ๋ง๋„ ์•„์ฃผ์•„์ฃผ ์ธ์ƒ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

 

๊ทธ๋ƒฅ ๋นŒ๋“œ ์ž˜๋˜๊ณ  nil ์•ˆ๋‚˜์˜จ๋‹ค๊ณ  ์•ˆ์‹ฌํ•˜์ง€ ๋ง๊ณ  ์ง„์งœ ์ž ์žฌ์ ์ธ ๋ฒ„๊ทธ๊ฐ€ ์—†๋Š”์ง€ ์ƒ๊ฐ์„ ์ž˜ ํ•ด๋ด์•ผ๊ฒ ์–ด์š”!

 

๊ทผ๋ฐ ์ƒ๊ฐํ•ด๋ณด๋‹ˆ๊นŒ ๊ฒฐ๊ตญ ARC๋ž‘ ์ด๊ฒƒ์ €๊ฒƒ ๋‹ค ์„ค๋ช…ํ•œ๊ฒŒ XCode13์— ์Šค์œ„ํ”„ํŠธ ์ปดํŒŒ์ผ ์ตœ์ ํ™” ์ƒˆ๋กœ ๋งŒ๋“ค์–ด์ง„๊ฑฐ ํ™๋ณดํ•˜๋ ค๊ณ  ๋นŒ๋“œ์—…ํ•˜์‹  ๊ฒƒ ๊ฐ™์•„์š”ใ…‹ใ…‹ใ…‹ 

 

๋ฐœํ‘œํ•ด์ฃผ์‹  ๋ถ„์ด ์Šค์œ„ํ”„ํŠธ ์ปดํŒŒ์ผ๋Ÿฌ ์—”์ง€๋‹ˆ์–ด์ด์‹ ๋ฐ ์ง„์งœ ๋ฉ‹์ง€๋„ค์š”.. ๋‚˜๋„ ์ €๋Ÿฐ ๋น„์Šทํ•œ ์ˆ˜์ค€๊นŒ์ง€ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋‚ ์ด ์˜ฌ๊นŒ..

 

์ค‘๊ฐ„์ค‘๊ฐ„์— ์ œ ์ƒ๊ฐ๋„ ๋“ค์–ด๊ฐ€๊ณ  ํ•ด์„œ ์ด์ƒํ•œ ๋‚ด์šฉ์ด ์žˆ๋‹ค๋ฉด ์•Œ๋ ค์ฃผ์„ธ์š”!