์๋ ์ฐธ์กฐ ์นด์ดํ Automatic Reference Counting
Swift๋ ์ฑ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ถ์ ํ๊ณ ๊ด๋ฆฌํ๊ธฐ ์ํด ์๋ ์ฐธ์กฐ ์นด์ดํ (ARC)๋ฅผ ์ฌ์ฉํ๋ค. ๋ฐ๋ผ์ ๊ฐ๋ฐ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ์ ๊ฒฝ ์ฐ์ง ์์๋ ๋๋ค. ARC์ ์ํด ๋ ์ด์ ํ์ํ์ง ์๋ ์ธ์คํด์ค๋ ์๋์ผ๋ก ๋ฉ๋ชจ๋ฆฌ์์ ํ ๋น ํด์ ๋๊ธฐ ๋๋ฌธ์ด๋ค.
ํ์ง๋ง ํด๋์ค ๋ฑ๊ณผ ๊ฐ์ด ์ฐธ์กฐํ์ ์ ๊ฒฝ์ฐ ์ฐธ์กฐ ๊ด๊ณ์ ์ํด ์๋ ๋ฉ๋ชจ๋ฆฌ๊ด๋ฆฌ๊ฐ ๋์ง ์๋ ๊ฒฝ์ฐ๊ฐ ์๋ค. ์ด๋ฌํ ๊ฒฝ์ฐ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ญ๋น๋๋๋ฐ, ์ด๋ฅผ ๋ฉ๋ชจ๋ฆฌ ๋์(memory leak)๋ผ๊ณ ํ๋ค. ๊ฐ๋จํ๊ฒ ์๊ฐํ๋ฉด, ์ฌ์ฉํ์ง๋ ์๊ณ ์ฌ์ฉํ ์๋ ์๋ ์ง์ด ๋ฐฉ ํ ์ผ ์ ๊ณ์ ์กด์ฌํ๋ ๊ฒ์ด๋ค.
ARC ์ ์๋์๋ฆฌ
ํด๋์ค์ ์๋ก์ด ์ธ์คํด์ค๊ฐ ์์ฑ๋ ๋, ARC๋ ํด๋น ์ธ์คํด์ค์ ๋ํ ์ ๋ณด๋ฅผ ๋ฉ๋ชจ๋ฆฌ ์ฒญํฌ์ ํ ๋นํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ธ์คํด์ค๊ฐ ๋ ์ด์ ํ์ํ์ง ์๊ฒ ๋๋ฉด ์ฌ์ฉ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น ํด์ ํ๋ค. ์๋ฅผ ๋ค๋ฉด ์๋์ ๊ฐ์ด ์ธ์คํด์ค๋ฅผ ํ ๋นํ๋ ๋ณ์์ nil์ ํ ๋นํ๋ฉด, ๋ณ์๋ ๋์ด์ ์ธ์คํด์ค๋ฅผ ์ฐธ์กฐํ์ง ์์ผ๋ฏ๋ก ํด๋น ์ธ์คํด์ค๋ ๋ฉ๋ชจ๋ฆฌ์์ ํ ๋น ํด์ ๋๋ค.
var person: Person? = Person()
person = nil // ์์์ ์์ฑํ Person ์ธ์คํด์ค๋ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ํด์ ๋๋ค.
์์ ์์๋ฅผ ๋ค์ ํ ๋ฒ ๋ณด๊ฒ ๋๋ฉด, Person ์ธ์คํด์ค๋ ๋ณ์ person์ ์ฐธ์กฐ๋ฅผ ํตํด์ ์ ์ง๋๊ณ ์๋ ๊ฒ์ด๋ค. ์ด ์ฐธ์กฐ๋ ์ธ์คํด์ค ์ ์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๊ธฐ ๋๋ฌธ์ ๊ฐํ ์ฐธ์กฐ(strong reference)๋ผ๊ณ ๋ถ๋ฅธ๋ค. ์ฆ, ๊ฐํ ์ฐธ์กฐ๊ฐ ๋จ์์๋ ํ ํ ๋น ํด์ ๋ฅผ ํ์ฉํ์ง ์๋๋ค.
(์ฐธ์กฐ = ๊ฐํ ์ฐธ์กฐ)
ARC ์ ๋์
๋ง์ฝ ์ Person ์ธ์คํด์ค๋ฅผ ์ฌ๋ฌ ๊ฐ์ ๋ณ์, ์์๊ฐ ์ฐธ์กฐํ๊ณ ์๋ค๋ฉด, ํด๋น ์ธ์คํด์ค๋ ์ฌ๋ฌ ๊ฐ์ ์ฐธ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์๊ฒ ๋๋ค. ๋ฐ๋ผ์ person ๋ณ์๊ฐ ๋์ด์ Person ์ธ์คํด์ค๋ฅผ ์ฐธ์กฐํ๊ณ ์์ง ์๋๋ผ๋ ๋ค๋ฅธ ์ฐธ์กฐ๋ค์ ์ํด ๋ฉ๋ชจ๋ฆฌ์์ ์ ์ง๋๊ฒ ๋๋ค.
์๋ ์์๋ฅผ ๋ณด๋ฉด, ๋ณ์ jack์ด ๋ ์ด์ Person ์ธ์คํด์ค๋ฅผ ์ฐธ์กฐํ๊ณ ์์ง ์์ง๋ง ์์ charles๊ฐ ๋ณ์ jack๊ณผ ๊ฐ์ ์ธ์คํด์ค๋ฅผ ์ฐธ์กฐํ๊ณ ์๊ธฐ ๋๋ฌธ์ ํด๋น ์ธ์คํด์ค๋ ๋ฉ๋ชจ๋ฆฌ์์ ์ ์ง๋๋ค. ์ฃผ์ํด์ผ ํ ์ ์, ๋ณ์ rene๋ ๋ค๋ฅธ Person ์ธ์คํด์ค๋ฅผ ํ๋ก ์ฐธ์กฐํ๊ณ ์๊ธฐ ๋๋ฌธ์ ๋ณ์ rene์ nil์ ํ ๋นํ๋ฉด ํด๋น ์ธ์คํด์ค๋ ๋ฉ๋ชจ๋ฆฌ์์ ํด์ ๋๋ค๋ ๊ฒ์ด๋ค.
var jack: Person? = Person()
var charles: Person? = jack
var rene: Person? = Person()
jack = nil // Person ์ธ์คํด์ค ๋ฉ๋ชจ๋ฆฌ ์ ์ง
rene = nil // Person ์ธ์คํด์ค ๋ฉ๋ชจ๋ฆฌ ํ ๋น ํด์
์ ์ฝ๋๋ฅผ ์ค์ ๋ก ๊ตฌํํด๋ณด๋ฉด ์๋์ ๊ฐ์ ๊ตฌ์ฑ์ด ๋๋ค.
Person ํด๋์ค์ name ํ๋กํผํฐ๋ฅผ ํตํด ๋ณ์ jack๊ณผ charles๊ฐ ๊ฐ์ ์ธ์คํด์ค๋ฅผ ์ฐธ์กฐํ๊ณ ์๋์ง ์ ์ ์๋ค.
์ถ๋ ฅ๋ฌธ๊ณผ ํจ๊ป ์คํํด ๋ณด๋ฉด ์๋์ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋ํ๋๋ค. jack์ ํ ๋นํ๋ Person ์ธ์คํด์ค๋ charles๋ ์ธ์คํด์ค๋ฅผ ์ฐธ์กฐํ์ง ์์์ผ ๋ฉ๋ชจ๋ฆฌ์์ ํ ๋น์ด ํด์ ๋๋ค.
์ด์ฒ๋ผ ARC๋ ์ธ์คํด์ค๋ฅผ ์ฐธ์กฐํ๋ ๋ณ์, ์์, ํ๋กํผํฐ์ ์๋ฅผ ์ธ์ด ๊ฐ์ฒด์ ๋ผ์ดํํ์๊ณผ ๊ด๊ณ๋ฅผ ๋ชจ๋ธ๋งํ๋ค.
์๋ ์ฐธ์กฐ ์นด์ดํ
'iOS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ iOS ] CompositionLayout ๋ฐฉํฅ ์ดํดํ๊ธฐ (0) | 2024.06.27 |
---|---|
[ iOS ] ๋ฐ์ดํฐ ์ ๋ฌด์ ๋ฐ๋ผ CollectionView UI ๋ณ๊ฒฝํ๊ธฐ with DiffableDataSource, Snapshot (1) | 2024.06.17 |
[ iOS ] ํ๋ฉด ์บก์ณํ๊ธฐ - UIGraphicsRenderer (2) | 2023.12.22 |
[ iOS ] ์ด๊ฑฐํ์ ์์๊ฐ์ผ๋ก ํํ ์ฌ์ฉํ๊ธฐ (2) | 2023.12.01 |
[ iOS ] MVC - 3 ) Controller ๊ฐ์ฒด (0) | 2023.11.18 |