์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- CRUD
- nodejs
- Encodable
- Firestore CRUD
- MongoDB
- UIRefreshController
- map
- components
- ExpressJS
- AVAudioPlayer
- ์ฑ๋ง๋ค๊ธฐ
- Decodable
- ์๊ณ ๋ฆฌ์ฆ
- mongoose
- Core Data
- Codable
- DispatchQueue
- Cloud Firestore
- Firestore
- RxSwift
- Reduce
- ์ง๋ฒ๋ณํ
- Figma
- ios
- Mac
- SWiFT
- Filter
- ์ฑ๋์์ธ
- ํ๋ก๊ทธ๋๋จธ์ค
- String.Index
- Today
- Total
Focus On Develop ๐ค๐ค
[Swift] ARC (Automatic Reference Counting) ๋ณธ๋ฌธ
[Swift] ARC (Automatic Reference Counting)
๋๋ฆฌ๋ฌ์ดํ 2021. 1. 29. 23:29Swift์์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ์ด๋ป๊ฒ ํ ๊น์~?
Swift์์ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐฉ์งํ๊ณ ์ฑ๋ฅ์ ํ๋ฅผ ๋ง๊ธฐ์ํด ARC ๋ฐฉ์์ ์ฌ์ฉํ๊ณ ์๋๋ฐ์!
์ด ARC์ ๋ํด์ ํ๋ฒ ์์๋ณด๋ ค๊ณ ํด์!
RC๋
Reference Counting์ ์ฝ์๋ก ์ ํ์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
<๋ฉ๋ชจ๋ฆฌ์์ ์ด๋ค Object๋ฅผ ์ฐธ์กฐํด์ ์ฌ์ฉํ ๋ ํด๋น Object๊ฐ ์ฐธ์กฐ๋๋ "๊ฐฏ์"๋ฅผ ์นด์ดํ ํด์, ํด๋น Object๋ฅผ ์ฐธ์กฐํ๋ ์นด์ดํธ๊ฐ 0์ด๋ฉด ๋ฉ๋ชจ๋ฆฌ์์ ๊ทธ Object๋ฅผ ์ง์ด๋ค> ๋ผ๋ ๊ธฐ๋ณธ์ ์ธ Rule์ด๋ผ๋ ์ ์ ๋ฅผ ๋ก๋๋ค.
MRC๋
Manual Reference Counting์ ์ฝ์๋ก Object-C์์ ๊ฐ๋ฐ์๊ฐ ์ง์ ! ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น/ํด์ ํด์ค์ผ ํ ๋ ์ฐ๋ ๋ฐฉ๋ฒ์ด๋ผ๊ณ ํ๋๋ฐ, ์ด ๋ถ๋ถ์ ์ฟจํ๊ฒ ์์ ๋๋ก ํจ์คํฉ๋๋ค.ใ ์ด๋ฏธ Swift๊ฐ ๋ณดํธํ ๋์๊ณ , ์ ๋ํ Object-C๋ 1๋ ๋ชจ๋ฅด๊ณ ํ์ฌ ์ฌ์ฉ๋ ์ํ๊ธฐ ๋๋ฌธ..ใ ๐๐
์ ์ด์ ๋ณธ๋ก ์ผ๋ก ๋ค์ด๊ฐ์,
ARC๋
Automatic Reference Counting์ ์ฝ์๋ก ํ๊ตญ์ด๋ก๋ "์๋์ฐธ์กฐ๊ณ์" ๋ผ๊ณ ํด์.
์์์ ์ค๋ช ํ ๋ด์ฉ์ผ๋ก ์ ์ถํด๋ณด๋ฉด Automatic ์ด๋ผ๋ฉด.. ์ด๋ ์ ๋ ๋๋์ ์ ๊ฒ ๊ฐ์ฃ ?
Swift์์๋ ์์์!! ์๋์ผ๋ก!! ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํด์ค๋ค๋ ๊ฒ๋๋ค!! RC์ ๊ธฐ๋ณธ์ ์ธ ์นด์ดํ Rule์ ๋ง์ฐฌ๊ฐ์ง๋ก ๊ฐ์ ธ๊ฐ๋๋ฐ, ์๋์ผ๋ก RC๋ฅผ ๊ฐ์งํ๊ณ ๋ฉ๋ชจ๋ฆฌ์์ ์ญ์ ํด์ค๋ค๋ ๊ฑฐ์ฃ ๐
๋ง๋ก ๊ตฌ๊ตฌ์ ์ ์ค๋ช ํ๋ ๊ฒ๋ณด๋ค "์ฝ๋+์๊ฐํ" ๋ก ์ ๋ฆฌํด๋๋๊ฒ ํจ์ฌ ๋ณด๊ธฐ ์ข์ ๊ฒ ๊ฐ์ต๋๋ค!!
๋จผ์ Reference Count (์ฐธ์กฐ ๊ณ์) ๊ฐ๋ ์ ๋ํด์,
class Car {
}
var a = Car() // 1๋ฒ ์ํฉ
var b = a // 2๋ฒ ์ํฉ
b = Car() // 3๋ฒ ์ํฉ
1๋ฒ์ํฉ ๊น์ง๋ a๋ Car ํด๋์ค์ Object์ด๊ณ , assign ๋๋ ์๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ ํ ๋น์ด ๋๊ฒ ์ฃ ?
์ด๋ ๊ฒ! ๋ฉ๋ชจ๋ฆฌ ์ด๋ค ๊ณต๊ฐ์ ์์ฑ๋ Object๋ฅผ a๊ฐ ์ฐธ์กฐํ๊ฒ ๋์๊ณ , ์ด Object๋ฅผ ์ฐธ์กฐํ๋ ๊ฒ์ ํ์ฌ a ํ๋ ๋ฟ์ด๋๊น Count๋ 1์ด๋์.
2๋ฒ์ํฉ์ด ๋๋ฉด, class๋๊น Reference ํ์ ์ผ๋ก b๋ ๋์ผํ๊ฒ a๊ฐ ์ฐธ์กฐํ๋ Object๋ฅผ ์ฐธ์กฐํ๊ฒ ๋๋ฉด์, ์์ฐ์ค๋ฝ๊ฒ Object์ Count๋ 2๋ก ์ฆ๊ฐํฉ๋๋ค.. a,b ๋ ๋ค ์ด Object๋ฅผ ์ฐธ์กฐํ๋๊น์!
3๋ฒ์ํฉ์ด ๋๋ฉด, b๊ฐ ์ฐธ์กฐํ๋ ์๋์ Object๋ ์ฐธ์กฐํ์ง ์๊ณ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์๋ก์ด Object๋ฅผ ์ฐธ์กฐํ๊ฒ ๋์. ๊ทธ์ ๋ฐ๋ผ ๊ธฐ์กด Object์ ์ฐธ์กฐ ์นด์ดํธ๋ 1๋ก ์ค์ด๋ค๊ณ (a๋ง ๋จ์), ์๋ก์ด Object ์ฐธ์กฐ ์นด์ดํธ๊ฐ 1๋ก ์์ฑ๋๊ฒ ์ฃ ?
์.. ๊ทธ๋ ์๊ฒ ์ด! ๊ทผ๋ฐ ์ ๊ฑด ๋๋์ฒด ์ธ์ ์นด์ดํธ๊ฐ 0์ด ๋์ ๋ฉ๋ชจ๋ฆฌ์์ ์ฌ๋ผ์ ธ ?????
๋น์ฐํ๊ฒ๋! ์ฐธ์กฐํ๋๊ฒ ๋ ์ด์ ์์๋, ์ฆ ๋ ์ด์ Scope์์์ ์กด์ฌํ์ง๋ ์๊ณ ์ฌ์ฉํ ํ์๋ ์์ด์ก์๋! ์ ๋๋ค ๐
class Car {
}
func someMethod() {
var a = Car()
var b = a
b = Car()
}
์ด๋ ๊ฒ ์์ ๊ฐ์ ์ํฉ์ด someMethod() ์์์ ๋ฐ์ํ๋ค๊ณ ํด๋ณด๋ฉด, someMethod๊ฐ ํธ์ถ๋์ด ์คํ๋๋ ๋์์ ์์ 1~3๋ฒ ์ํฉ๊ณผ ๋์ผํ๊ฒ ๋ฉ๋ชจ๋ฆฌ์ ์กด์ฌํ ๊ฑฐ์์. ๊ทธ๋ฐ๋ฐ.. ์ someMethod๊ฐ ์ข ๋ฃ๋๋ฉด!?
์ด๋ ๊ฒ ๋ ์ด์ ์ด Object๋ค์ ์ฐธ์กฐํ๋๊ฒ ์์ด์ง๊ณ , ์ฌ์ฉํ ํ์๋ ์๊ณ , Scope์๋ ์กด์ฌํ์ง ์์ผ๋ฉฐ ์์ฐ์ค๋ฝ๊ฒ ๋๋ค ์ฐธ์กฐ ์นด์ดํธ ์๊ฐ 0์ด ๋์ฃ . ๊ทธ๋ฌ๋ฉด Swift์ Garbage Collector(๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ ์ฒญ์๊ธฐ ๊ฐ์๊ฑฐ ใ )๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์์ ์ด Object๋ฅผ ์ง์๋ฒ๋ฆฌ๋ฉด์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํด์ค๋๋ค!
์.. ๊ทธ๋ฌ๋ฉด ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ Swift์์ ์๋์ ์ฒ์ฒ ํด์ค๋ค๋๋ฐ. ๊ตณ์ด ๋ด๊ฐ ์ด ๊ฐ๋ ์ ์์์ผ ํ ํ์๊ฐ ์์ด ??? ๊ทธ๋ ์ต๋๋ค!! ๐
์ด ๊ฐ๋ ์ ๋ฐํ์ผ๋ก Swift์์ ์์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํด์ฃผ์ง๋ง, ์ค์ ๋ก๋ Swift๊ฐ ํท๊ฐ๋ ค์ ์ฐธ์กฐ๊ฐ ์์ด์ ธ๋ฒ๋ฆฐ Object๋ฅผ ์ฌ์ ํ ์ฌ์ฉํ๋ ์ค ์ฐฉ๊ฐํ๊ณ ๋ฉ๋ชจ๋ฆฌ์ ๋จ๊ฒจ๋๋ ๋ฐ๋์, ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ์๊ธฐ๋ ํฌ์ธํธ๊ฐ ๋ฐ์ํ๊ธฐ๋ ํฉ๋๋ค.
์? ์์์ํด์ค๋ค๋ฉฐ!? ๋ค.. ์ ๋ ์์์ต๋๋ค..ใ ์ธ์ ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ๋ฐ์ํ๊ณ , ์ด๋ป๊ฒ ๋ฐฉ์งํด์ผ ํ ์ง ๊ณ์ํด์ ์์๋ด ์๋ค! ๐ค
๐ 2021/01/29 - [iOS [Swift]/๊ธฐ์ด๋ฅผ ํํํ!] - [Swift] strong, weak, unowned
[Swift Docs] docs.swift.org/swift-book/LanguageGuide/AutomaticReferenceCounting.html
'iOS [Swift] > ๊ธฐ์ด๋ฅผ ํํํ!' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] Storyboard vs Programmatic UI (0) | 2021.02.05 |
---|---|
[Swift] strong, weak, unowned (0) | 2021.01.29 |
[Swift] ์๊ณ ๋ฆฌ์ฆ ์ฝ๋ฉ์ ์ ์ฉํ Tip๋ค! (0) | 2021.01.05 |
[Swift] Core Data(2) ์ค์ตํด๋ณด๊ธฐ (0) | 2020.12.21 |
[Swift] Core Data(1) ๊ฐ๋ ์ ๋ฆฌ (0) | 2020.12.21 |