[iOS/Swift] ์ธ์Šคํ„ด์Šค์˜ ์ˆœํ™˜ ์ฐธ์กฐ์— ์˜ํ•œ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜

2024. 3. 21. 18:02ยทlearnings/Swift

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

0. ์‚ฌ๊ฑด ๋ฐœ์ƒ

์ž, ์—ฌ๊ธฐ ์˜ค๋ธŒ์ ํŠธ ํด๋ž˜์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์• ์ธ์œผ๋กœ ํ•˜๋Š”!
๋˜ํ•œ, ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น๊ณผ ํ•ด์ œ์‹œ์— ์˜ค๋ธŒ์ ํŠธ์˜ ์ฃผ์†Œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

class Object:AddressPrinter{
    var lover: Object?
}
class AddressPrinter{
    init(){
        print( "\(Unmanaged.passUnretained(self).toOpaque()) \(type(of: self)) allocated")
    }
    deinit{
        print( "\(Unmanaged.passUnretained(self).toOpaque()) \(type(of: self)) deallocated")
    }
}

์ด์ œ ์ž„์˜์˜ ๊ฐ์ฒด kim๊ณผ lee๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์„œ๋กœ๋ฅผ ์• ์ธ์œผ๋กœ ์‚ผ์•˜๋‹ค๊ณ  ์นฉ์‹œ๋‹ค.

var kim:Object? = Object()
var lee:Object? = Object()

kim!.lover = lee
lee!.lover = kim

๊ทธ๋ฆฌ๊ณ  ์ €๋Š” ์ด ์˜ค๋ธŒ์ ํŠธ๋“ค์„ ๋”์ด์ƒ ์“ฐ์ง€ ์•Š๊ณ ์‹ถ์œผ๋ฏ€๋กœ nil์„ ํ• ๋‹นํ•˜๋ฉด์„œ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ œ๊ฑฐ์‹œํ‚ฌ๊ฒ๋‹ˆ๋‹ค.
์–ด๋–ค ์ผ์ด ๋ฒŒ์–ด์งˆ๊นŒ์š”? 

์„œ๋กœ ๊ฐ™์€ ํด๋ž˜์Šคํƒ€์ž…์ด๋ผ ์ด๋Ÿฐ์ผ์ด ๋ฒŒ์–ด์ง€๋Š” ๊ฑธ๊นŒ์š”?
๊ทธ๋ ‡๋‹ค๋ฉด ์ด๋ฒˆ์—๋Š” kim๊ณผ lee๋ฅผ ์„œ๋กœ ๋‹ค๋ฅธ ํด๋ž˜์Šค๋กœ ์ƒ์„ฑํ•œ ๋’ค, nil์„ ํ• ๋‹น ํ•ด ๋ณด๋„๋ก ํ•˜์ฃ .

class Object:AddressPrinter{
    var lover: Subject?
}
class Subject:AddressPrinter{
    var lover: Object?
}
class AddressPrinter{
    init(){
        print( "\(Unmanaged.passUnretained(self).toOpaque()) \(type(of: self)) allocated")
    }
    deinit{
        print( "\(Unmanaged.passUnretained(self).toOpaque()) \(type(of: self)) deallocated")
    }
}

var kim:Object? = Object()
var lee:Subject? = Subject()

kim!.lover = lee
lee!.lover = kim

kim = nil
lee = nil

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

1. ์›์ธ ํŒŒ์•…

Swift๋Š” ARC๋ผ๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์ž๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณ„์† ์ณ๋‹ค๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  Swift์—์„œ Class๋Š” Referenceํƒ€์ž…์œผ๋กœ, Value๋ฅผ ๋ณต์‚ฌํ•˜๋Š”๊ฒƒ์ด ํ•˜๋Š” Reference๋ฅผ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.
์ดํ•ด๊ฐ€ ์•ˆ๋˜์‹ ๋‹ค๋ฉด, ์—ฌ๊ธฐ์—์„œ ์ž˜ ์„ค๋ช…ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด์ฉŒ๋ฉด Swift๋ฅผ ๋‹ค์‹œ ๊ณต๋ถ€ํ•˜์‹œ๋Š”๊ฒŒ ๋„์›€์ด ๋  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

Swift์—์„œ๋Š” A๊ฐ€ Referenceํƒ€์ž…์ด๋ฉด, A๋ฅผ ์–ด๋”˜๊ฐ€๋กœ ๋ณต์‚ฌํ•  ๋•Œ ๊ฐ’์ด ์•„๋‹Œ ์ฐธ์กฐ(๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ)๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ ๋„ฃ์–ด์ค๋‹ˆ๋‹ค.
kim.lover = lee ์—์„œ ๋˜๋‹ค๋ฅธ lee๋ฅผ ๋งŒ๋“ค์–ด ๋„ฃ๋Š”๊ฒƒ์ด ์•„๋‹Œ, lee์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ ๋„ฃ๋Š”๋‹ค๋Š” ๋ง์ด์ฃ .
(์‚ฌ์‹ค lee์กฐ์ฐจ๋„ ์–ด๋”˜๊ฐ€์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๋‹ด๊ณ  ์žˆ๋‹ต๋‹ˆ๋‹ค!)
์ด๋•Œ ARC๋Š” lee์˜ ์ฃผ์†Œ๊ฐ€ ๋ณต์‚ฌ๋  ๋•Œ ๋งˆ๋‹ค ํšŸ์ˆ˜๋ฅผ ์„ธ๊ณ , ๋ณต์‚ฌ๋œ ๋ณ€์ˆ˜๊ฐ€ ํ•ด์ œ๋  ๋•Œ ๋งˆ๋‹ค ํšŸ์ˆ˜๋ฅผ ์ฐจ๊ฐํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ํšŸ์ˆ˜๊ฐ€ 0์ด ๋  ๋•Œ, lee๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํ•ด์ œ์‹œ์ผœ ๋ฒ„๋ฆฌ๋Š”๊ฒƒ์ด์ฃ .
Swift๋Š” ์ด ํšŸ์ˆ˜๋ฅผ ์ฐธ์กฐ ์นด์šดํŠธ(Reference count)๋ผ ํ•˜๊ณ , ARC๋Š” ์ฐธ์กฐ ์นด์šดํŠธ๋ฅผ ์„ธ์–ด 0์ด ๋  ๋•Œ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๊ฐ์ฒด๋ฅผ ํ•ด์ œ์‹œํ‚ต๋‹ˆ๋‹ค.

'์ˆœํ™˜์ฐธ์กฐ'๋Š” ๊ฐ์ฒด A์™€ B์— ๋Œ€ํ•˜์—ฌ A๊ฐ€ B๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๊ณ , B๊ฐ€ A๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ์„ ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  A์™€ B๋Š” ์ฒ˜์Œ ์–ด๋”˜๊ฐ€ ํ• ๋‹น๋˜์—ˆ์„ ๋•Œ ์ฐธ์กฐ ์นด์šดํŠธ๊ฐ€ ๊ฐ๊ฐ 1์”ฉ ์ฆ๊ฐ€ํ•˜๊ณ , ์„œ๋กœ๋ฅผ ์ฐธ์กฐํ•  ๋•Œ ๋‹ค์‹œ 1์”ฉ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋ ‡๋‹ค๋ฉด, A์™€ B๊ฐ€ ์ฐธ์กฐ๋˜๊ณ  ์žˆ๋Š” ๋ชจ๋“  ๊ณณ์— nil์„ ํ• ๋‹นํ•˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์‚ฌ๋ผ์ง€์ง€ ์•Š๊ฒ ์Šต๋‹ˆ๊นŒ?

kim?.lover = nil
lee?.lover = nil
kim = nil
lee = nil

์ •๋‹ต์ž…๋‹ˆ๋‹ค! ์ด์ œ A๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๋ชจ๋“  ๊ณณ์— nil์„ ํ• ๋‹นํ•˜๋ฉด ์ด๋Ÿฐ์ผ์€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ฒ ๊ตฐ์š”.
๊ทธ๋Ÿฐ๋ฐ ๊ทธ๊ฒƒ์€ ๋„ˆ๋ฌด ๋ฒˆ๊ฑฐ๋กœ์šด ์ผ ์ž…๋‹ˆ๋‹ค. ์ฐจ๋ผ๋ฆฌ ๋ณต์‚ฌํ•  ๋•Œ ์ฐธ์กฐ ์นด์šดํŠธ๋ฅผ ์„ธ์ง€ ์•Š๊ฒŒ ํ•˜๋ฉด ์–ด๋–จ๊นŒ์š”?
์ด๋•Œ Swift์˜ ํ‚ค์›Œ๋“œ 'weak'์ด ๋“ฑ์žฅํ•ฉ๋‹ˆ๋‹ค.

2. ํ•ด๊ฒฐ

weak ํ‚ค์›Œ๋“œ๋Š” ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•  ๋•Œ ์•ฝํ•œ ์ฐธ์กฐ๋กœ ์ฐธ์กฐํ•˜๊ฒŒ ๋˜๊ณ  ๋‹ค์Œ ํ–‰๋™์„ ํ•˜๋„๋ก ๋งŒ๋“ญ๋‹ˆ๋‹ค.

  1. ์ฐธ์กฐ ์นด์šดํŠธ๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  2. ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š” ๊ฐ์ฒด๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํ•ด์ œ๋  ๋•Œ nil์„ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿผ ํ‰์†Œ์— ์“ฐ๋Š”๊ฑด ๋ฌด์Šจ ์ฐธ์กฐ ์ผ๊นŒ์š”? ๋ณ„๋‹ค๋ฅธ ํ‚ค์›Œ๋“œ๊ฐ€ ๋ถ™์ง€ ์•Š์•˜๋‹ค๋ฉด, ๊ทธ๊ฒƒ์€ ๊ฐ•ํ•œ ์ฐธ์กฐ์ž…๋‹ˆ๋‹ค.
์ž, ์ด์ œ object์˜ lover์— weak๋ฅผ ๋‹ฌ์•„ ์•ฝํ•œ ์ฐธ์กฐ๋กœ ๋งŒ๋“ค์–ด ์ˆœํ™˜์ฐธ์กฐ๋ฅผ ๋Š์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

class Object:AddressPrinter{
    weak var lover: Subject?
}

...

lee = nil


kim์€ lee๋ฅผ ์•ฝํ•œ์ฐธ์กฐํ•˜๊ณ  ์žˆ์œผ๋‹ˆ, lee์— nil์„ ํ• ๋‹นํ•˜๋ฉด lee๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ œ๊ฑฐ๋˜๊ฒ ์ฃ ?

lee๊ฐ€ ์ž˜ ์‚ฌ๋ผ์กŒ์Œ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์—ฌ๊ธฐ์„œ ์ œ๊ฐ€ ํ•ด๋งค๋˜ ๋ถ€๋ถ„์ด ์žˆ๋Š”๋ฐ์š”, ๋‹ค์Œ ์ฝ”๋“œ์™€ ๊ทธ ์ฃผ์„์„ ๋ด ์ฃผ์‹œ์ง€์š”

var kim:Object? = Object() //kim์˜ ์ฐธ์กฐํšŸ์ˆ˜ 1
var lee:Subject? = Subject() //lee์˜ ์ฐธ์กฐํšŸ์ˆ˜ 1

kim?.lover = lee //kim์˜ ์ฐธ์กฐํšŸ์ˆ˜ 1, lee์˜ ์ฐธ์กฐํšŸ์ˆ˜ 1
lee?.lover = kim //kim์˜ ์ฐธ์กฐํšŸ์ˆ˜ 2, lee์˜ ์ฐธ์กฐํšŸ์ˆ˜ 1

lee = nil //lee์˜ ์ฐธ์กฐํšŸ์ˆ˜ 0, kim์˜ ์ฐธ์กฐํšŸ์ˆ˜ 2
kim = nil //kim์˜ ์ฐธ์กฐํšŸ์ˆ˜ 1, lee์˜ ์ฐธ์กฐํšŸ์ˆ˜ 0

๋ถ„๋ช… ์šฐ๋ฆฌ๊ฐ€ ์•Œ๊ธฐ๋กœ๋Š” kim์˜ ์ฐธ์กฐํšŸ์ˆ˜๋Š” ์•„์ง ๋‚จ์•„์žˆ์œผ๋ฏ€๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ๋‚จ์•„์žˆ๊ฒ ์ง€์š”?
๊ทธ๋Ÿฐ๋ฐ ์ด ๊ฒฝ์šฐ์—๋„ kim์€ ํ•ด์ œ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค

์™œ ์ผ๊นŒ์š”?
์—ฌ๊ธฐ์—์„œ ์ž˜ ์„ค๋ช…ํ•ด์ฃผ๊ณ  ์žˆ๋Š”๋ฐ, ARC๋Š”

์–ด๋–ค ์ธ์Šคํ„ด์Šค๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํ•ด์ œ๋˜์—ˆ์„ ๋•Œ
๊ทธ ์ธ์Šคํ„ด์Šค์˜ ํ”„๋กœํผํ‹ฐ๊ฐ€ ๋‹ค๋ฅธ ์ธ์Šคํ„ด์Šค์˜ ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ฐ€๋ฅดํ‚ค๊ณ  ์žˆ๋‹ค๋ฉด
ARC๋Š” ๊ฐ€๋ฅดํ‚ค๋˜ ์ธ์Šคํ„ด์Šค ํ”„๋กœํผํ‹ฐ์˜ RC๋ฅผ 1 ๊ฐ์†Œ์‹œํ‚จ๋‹ค.

์ด๊ฑธ ๋ชฐ๋ผ์„œ ์ฐธ์กฐ์นด์šดํŠธ๋ฅผ 2์‹œ๊ฐ„๋™์•ˆ ๋‹ค์‹œ ์„ธ๊ณ ์žˆ์—ˆ๋‹ค๋Š”,, ARC๊ณต๋ถ€ ๋‹ค์‹œํ•ด์•ผ๊ฒ ์Šต๋‹ˆ๋‹ค

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

์ด ์™ธ์—๋„ unowned ์ฐธ์กฐ, ํด๋กœ์ €์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ๋“ฑ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๋Š” ๋” ๋‚จ์•˜์Šต๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋ฏ€๋กœ ๋‹ค๋ฅธ ํฌ์ŠคํŒ…์—์„œ ๋˜ ๋งŒ๋‚˜์š”!

 

์ฐธ๊ณ ํ•œ ๊ธ€

Swift ๊ณต์‹ ํ•œ๊ธ€๋ฌธ์„œ

 

์ž๋™ ์ฐธ์กฐ ์นด์šดํŒ… (Automatic Reference Counting) | Swift

๊ฐ์ฒด์˜ ๋ผ์ดํ”„ํƒ€์ž„๊ณผ ๊ด€๊ณ„๋ฅผ ๋ชจ๋ธ๋งํ•ฉ๋‹ˆ๋‹ค. Swift๋Š” ์•ฑ์˜ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์ถ”์ ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์ž๋™ ์ฐธ์กฐ ์นด์šดํŒ… (Automatic Reference Counting) (ARC)๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ์— Swift์—์„œ ๋ฉ”๋ชจ๋ฆฌ

bbiguduk.gitbook.io

์†Œ๋Œ์ด๋‹˜ ๋ธ”๋กœ๊ทธ

 

iOS) ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ (1/3) - ARC(Automatic Reference Counting)

์•ˆ๋…•ํ•˜์„ธ์š”~~ ์†Œ๋“ค์ž…๋‹ˆ๋‹ค ๐Ÿ‘€ ์˜ค๋Š˜์€ ์ง€๋‚œ ์‹œ๊ฐ„ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ์— ์ด์–ด Swift๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๊ฐ€ ์–ด๋–ค ์‹์œผ๋กœ ๋˜๋Š”์ง€์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•ด๋ณผ ๊ฑฐ์˜ˆ์š” :) ARC ๋ฉด์ ‘ ๋‹จ๊ณจ ์งˆ๋ฌธ์ด๋ผ์ฃ ? ๊น”๊น” iOS ๊ฐœ๋ฐœ์ž๋ผ

babbab2.tistory.com

๋ฒผ๋ฆฌ๋„ค๋‹˜ ๋ธ”๋กœ๊ทธ(์ง์ ‘ ๊ทธ๋ฆฐ ๊ทธ๋ฆผ์œผ๋กœ ์„ค๋ช…ํ•ด์ฃผ์…”์„œ ๊ฐ๋™์ ์ด์—ˆ์Œ)

 

[๋ฌธ๊ณผ ์ฝ”๋ฆฐ์ด์˜ IT ๊ธฐ๋ก์žฅ] IOS Swift - ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ / ๋ฉ”๋ชจ๋ฆฌ ์ฐธ์กฐ ๋ฐฉ๋ฒ• (weak / strong / unowned)

[๋ฌธ๊ณผ ์ฝ”๋ฆฐ์ด์˜ IT ๊ธฐ๋ก์žฅ] IOS Swift - ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ / ๋ฉ”๋ชจ๋ฆฌ ์ฐธ์กฐ ๋ฐฉ๋ฒ• (weak / strong / unowned) 1. ARC (Automatic Reference Counting = ์ž๋™ ์ฐธ์กฐ ๊ณ„์ˆ˜) - IOS์—์„œ ์•ฑ์˜ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์„ ์ž๋™์œผ๋กœ ์ถ”์  ๋ฐ ๊ด€๋ฆฌํ•ด์ฃผ๋Š”

vansoft1215.tistory.com

 

 

'learnings > Swift' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[iOS/Swift] ๋ทฐ ์ขŒํ‘œ๊ณ„์™€ UIView.Frame  (2) 2024.08.26
[iOS/Swift] ์†Œ๋ฉธ์ž๋ฅผ ์‚ฌ์šฉํ•œ ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ  (0) 2024.03.26
[iOS/Swift] TableView์—์„œ SnapScroll (magnetic scroll) ๊ตฌํ˜„  (0) 2023.01.20
[iOS/Swift] #1-2 ๋‚˜์˜ ์ฒซ ํ† ์ดํ”„๋กœ์ ํŠธ  (0) 2021.09.23
[iOS/Swift] #1-1 ๋‚˜์˜ ์ฒซ ํ† ์ดํ”„๋กœ์ ํŠธ  (0) 2021.09.21
'learnings/Swift' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [iOS/Swift] ๋ทฐ ์ขŒํ‘œ๊ณ„์™€ UIView.Frame
  • [iOS/Swift] ์†Œ๋ฉธ์ž๋ฅผ ์‚ฌ์šฉํ•œ ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ
  • [iOS/Swift] TableView์—์„œ SnapScroll (magnetic scroll) ๊ตฌํ˜„
  • [iOS/Swift] #1-2 ๋‚˜์˜ ์ฒซ ํ† ์ดํ”„๋กœ์ ํŠธ
Une.
Une.
์ด์ง„์„ธ์ƒ์† ์ž์œ ๋ฅผ ์ฐพ๋Š” ์‚ฌ๋žŒ์ด ๋‚จ๊ธด ๊ธฐ๋ก
  • Une.
    Une's Dev-log๐Ÿ
    Une.
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • \ (36) N
      • log (4)
      • mac (2)
      • learnings (29) N
        • ํšŒ๊ณ  (0)
        • Swift (11) N
        • PS (10)
        • Algorithm&DS (6)
        • c++ (2)
      • CS (1)
        • ๋„คํŠธ์›Œํฌ (1)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ๋ฐฉ๋ช…๋ก
    • ๊ด€๋ฆฌ์ž
    • ๊ธ€์“ฐ๊ธฐ
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ๊ฐ•ํ•œ์ฐธ์กฐ
    ํ† ์ดํ”„๋กœ์ ํŠธ
    ios
    ์ฝ”๋“œ์—…
    ์Šคํƒ
    PS
    ์ž๋ฃŒ๊ตฌ์กฐ
    BFS
    swift
    ๋ฐฑ์ค€
    ๋”๋ธ”๋ฆฌ๋งํฌ๋“œ๋ฆฌ์ŠคํŠธ
    ์ฐจ๋Ÿ‰๊ธฐ์ง€์•Œ๊ณ ๋ฆฌ์ฆ˜
    DFS
    C++
    ๊ทธ๋ฆฌ๋””
    ๋งฅ
    ์•Œ๊ณ ๋ฆฌ์ฆ˜
    swift 6.2
    wwdc25
    ํ™˜ํ˜•๋งํฌ๋“œ๋ฆฌ์ŠคํŠธ
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
Une.
[iOS/Swift] ์ธ์Šคํ„ด์Šค์˜ ์ˆœํ™˜ ์ฐธ์กฐ์— ์˜ํ•œ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”