5๏ธโฃ ๋ฒ ๊ธ์ ์์ํ๋ฉฐ
๊ตฌ๊ธ๋ง์ ํ๋ค ๋ณด๋ฉด ์ ๋ง ๋ง์ ๋ธ๋ก๊ทธ ๊ธ์ ๋ณด๊ฒ ๋๋๋ฐ, ํธํ๊ฒ ์ ์ ๋ฏ ํ๋ฉด์๋ ๋ด์ฉ ์ ๋ฌ์ด ์ ๋๋ ๊ธ์ ๋ณด๋ฉด '์ด ๊ธ์ ์ธ ๋ ์ผ๋ง๋ ๋ง์ ์๊ฐ์ ๋ค์์๊น' ์๊ฐ์ด ๋ค์ด ์ข์์๋ฅผ ๊ผญ ๋๋ฅด๊ณ ๋์จ๋ค. ์ด๋ฐ ์๊ฐ์ด ๋๋ ๋งํผ ๋๋ ๋ธ๋ก๊ทธ ๊ธ์ ์ธ ๋ ์ค๋ ๊ฑธ๋ฆฌ๋๋ฐ, ๊ทธ๋๋ ํญ์ ์์ฌ์์ด ๋จ๋๋ค. ๊ทธ๋์ ํญ์ '๊ณต๋ถ๋ฅผ ๊ธฐ๋กํ๋ค' ์ ์๊ฐํ๋ฉฐ ๊ธ์ ๊ณ์ ์จ ์๋๋ฐ ์ง๊ธ๊น์ง ๊ธ์ด ๊ฝค ์์ฌ ๋ฟ๋ฏํ๋ค!
์งง์ ์นดํ ๊ณ ๋ฆฌ๋ ๋ ๋ถ๋ด์ ๋ด๋ ค๋๊ณ ๊ธ์ ์ฐ๊ธฐ ์ํด ๋ง๋ค์๋๋ฐ, ํธํ๊ฒ ์ฐ๋ ค๋ค ๋ณด๋ ๋ ์ด๋ ค์ด ๊ฒ ๊ฐ์ ๊ธ์ด ์ ์ ์จ์ง๋ค. ๊ทธ๋ด ์๋ก ๋ ๋ถ๋ด์ ๋ด๋ ค ๋๊ณ ํธํ๊ฒ ์ฐ๋ ค ํ๋ค.
๐ ํ๋ฒ๊ฑฐ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์
์๋ ๋ง๋ถํฐ ํ๋ก๊ทธ๋๋จธ์ค 0 ๋ ๋ฒจ๋ถํฐ ์ฐจ๊ทผ์ฐจ๊ทผ ํ์ด๊ฐ๊ณ ์๋๋ฐ ์ฌํด ์ด๋ถํฐ 1 ๋ ๋ฒจ์ ์ ์ฑํด ์ ๋ฐ ๊ฐ๋ ํ์๋ค! ์์ง ๊ฐ ๊ธธ์ด ๋ฉ๋ค๋๊ฑธ ์์ง๋ง 1 ๋ ๋ฒจ๊น์ง ์ฌ๋ผ์จ ๊ฒ์ ๊ธฐ๋ปํ๊ธฐ๋ก ํ๋ค.
์๋ฌดํผ ์ค๋์ ํ๋ฒ๊ฑฐ ๋ฌธ์ ๋ฅผ ํ์๋ค. ๋ฌธ์ ํด๊ฒฐ์ ์์ฃผ ์ฌ์ ๋ค. ํ์ง๋ง ์๊ฐ ์ด๊ณผ์ ์ ๋ฅผ ๋จน์๋ค. ํ๋์ฉ ์คํ์ ์์๊ฐ๋ ๋ฐฉ๋ฒ์ ์์์ผ๋ก replacingOccurrences๋ถํฐ ์ ๊ท์๊น์ง ์๊ฐ๋๋ ๋ฐฉ๋ฒ์ ๋ค ํด๋ดค๋๋ฐ, ์ ์ ์ฝ๋๋ ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง๊ณ ์คํ ์๊ฐ์ด ๋์ด๊ฐ๋ ๊ฑธ ๋ณด๋ฉด์ ์ด๊ฑด ์๋๋ค ์ถ์๋ค. ์ด๋ฏธ ๊ณํํ๋ ํ๋ฃจ ํ์ด ์๊ฐ์ด ํ์ฉ ๋์ด๊ฐ๊ธฐ ๋๋ฌธ์ ๊ตฌ๊ธ๋ง์ผ๋ก ์์ด๋์ด๋ฅผ ์ป๊ณ ๋ด์ผ ๋ค์ ํ์ด๋ณด๋ ค ํ๋ค. ๊ทผ๋ฐ ๊ตฌ๊ธ๋ง์ ํ์๋ง์ ๋๋ ๋๊ฐ์ด ํ๊ณ ํต๊ณผํ ๊ธ์ ๋ณด์๋ค. ๊ทธ ๋ถ์ ์ฝ๋์ ๋ด ์ฝ๋์ ์ฐจ์ด์ ์ ArraySlice ์ธ์คํด์ค๋ก Array ์ธ์คํฐ์ค๋ฅผ ๋ง๋ค์ด ์ฌ์ฉํ ๊ฒ์ด์๋ค. ๊ทธ ๋ถ๋ ๋ฌธ์ ๋ฅผ ํ๋ฉฐ ์ด ๋ ๊ฐ์ฒด์ ์๋ ์ฐจ์ด๋ฅผ ์๊ฒ ๋์๋ค๊ณ ํ๋ค. ๊ทธ๋์ ์ด๊ฑด ์ ๋ฆฌํ ํ์๊ฐ ์๋ค๊ณ ์๊ฐ์ด ๋ค์ด ๊ณต๋ถ๋ฅผ ์์ํ๋ค.
๐ค Array์ ArraySlice
๋ค๋ฅธ ์ธ์ด๋ค๊ณผ๋ ๋ค๋ฅด๊ฒ Swift์์๋ Array๊ฐ ๊ฐ ํ์ ์ด๋ค. ๊ทธ๋์ ํ ๋น์ ํ๋ฉด ์ฐธ์กฐ๋๋ ๊ฒ์ด ์๋๊ธฐ์ ๋ณ๊ฐ์ Array ์ธ์คํด์ค๊ฐ ์์ฑ๋๋ค. ์ด๋ ๊ฒ ๋ค์ผ๋ฉด ์์นซ ๋นํจ์จ์ ์ด์ง ์์๊น ์๊ฐํ ์๋ ์์ง๋ง, ๊ณต์๋ฌธ์๋ฅผ ์ฝ์ด๋ณด๋ฉด Swift๊ฐ ํจ์จ์ ์ธ ์ธ์ด๋ผ๋ ๊ฒ์ ์ ์ ์๋ค.
Array๋ copy-on-write ์ต์ ํ, ์ฆ ๋ณต์ฌ ๋ ํ ์์ ๋๋ค. Array ์ธ์คํด์ค๋ฅผ ๊ฐ์ง ๋ณ์1์ ๋ณ์2์ ํ ๋นํ๋ฉด ๋ณ๊ฐ์ Array๋ผ์ ๋ณ์1์ ๋ณ๊ฒฝ์ฌํญ์ ๋ณ์2๋ ์ํฅ์ ๋ฐ์ง ์๋๋ค. ํ์ง๋ง ์์ ์ด ์ผ์ด๋๊ธฐ ์ ๊น์ง๋ ๋ณ์1๊ณผ ๋ณ์2๋ ๋ชจ๋ ๊ฐ์ ์ ์ฅ์๋ฅผ ๊ณต์ (share)ํ๋ค.
์ฃผ์ํด์ผํ ๊ฒ์ reference๊ฐ ์๋๋ผ share๋ผ๊ณ ํํํ ๊ฒ์ด๋ค. ์์ด๋ก๋ ๋ฌธ์๋ฅผ ์ฝ์ผ๋ฉด์ ๋๋ ์ ์ ๊ทธ๋ฅ ๊ฐ๋ฐ ๋ด์ฉ๋ ์ด๋ ค์ด๋ฐ ์์ด๊น์ง ํด์ํด์ผํ๋ ๋์ฑ ์ด๋ ต๋ค๋ ๊ฒ์ด๋ค. ์ฌ๊ธฐ์ ์ดํด์ ๋์์ด ๋๋ ๊ฑด ๋จ์ด์ด๋ค! ์ผ๋ถ๋ฌ ๊ทธ ๋จ์ด๋ฅผ ์ด ์ด์ ๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋จ์ด๋ก ๋ด์ฉ์ ์ฐ๊ฒฐํด๊ฐ๋ฉด ๊ณต๋ถ์ ๋์์ด ๋๋ค!
๋ค์ ๋์๊ฐ์ Array๋ ์ด๋ ๊ฒ copy-on-write ์ต์ ํ๋ฅผ ํตํด ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ ์ฝํ๋ค. ๋ฌผ๋ก ๊ฐ ํ์ ์ธ๋งํผ ์์ ์ด ๋ฐ์ํ๋ฉด ํด๋น Array๊ฐ ๋ณต์ฌ๋์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋น์ฉ์ด ๋ค์ง๋ง ๋ณ๊ฒฝ์ฌํญ์ด ์๋๋ฐ ์ฌ๋ฌ ๊ฐ์ ๋ณต์ฌ๋ณธ์ด ์๊ธด๋ค๋ฉด ์ ๋ง ๋ญ๋น์ผ ๊ฒ์ด๋ค.
ArraySlices๋ Array.prefix ์ฒ๋ผ Array์ ์ผ๋ถ๋ถ์ ์กฐ๊ฐ(slice)๋ด๊ฒ ๋๋ฉด ์ป๊ฒ ๋๋ค. ํ์ง๋ง ์์ Array๊ฐ ์ ์ฅ์๋ฅผ ๊ณต์ (share)ํ๋ ๊ฒ์ฒ๋ผ ๋ฌด์กฐ๊ฑด ์กฐ๊ฐ๋ด์ง ์๋๋ค. ArraySlice๋ ์๋ Array์ ์ ์ฅ์ ์ ์ฒด๋ฅผ ์ฐธ์กฐ(reference)ํ๋ค. ๊ทธ๋ฆฌ๊ณ ํด๋นํ๋ ๋ฒ์๋ฅผ "view"๋ฅผ ํตํด ์ ๊ณตํ๋ค. ๊ทธ๋์ Array์์ ์ฌ์ฉํ๋ ์์ ๋ค์ ๊ทธ๋๋ก ์ฌ์ฉํ ์๋ ์๋ค. ์ฃผ์ํด์ผ ํ ์ ์ "์ ์ฒด"๋ฅผ ์ฐธ์กฐํ๋ค๋ ๊ฒ์ด๋ค. ๊ทธ๋์ ๋ง์ฝ ์๋ Array๋ฅผ ๊ฐ๋ฆฌํค๋ ๋ณ์์ LifeTime์ด ๋๋ ํด๋น Array๋ฅผ ๋ ์ด์ ์ฌ์ฉํ ์ ์๊ฒ ๋๋๋ผ๋, ArraySlice์ ์ฐธ์กฐ๋ก ์ธํด ๋ฉ๋ชจ๋ฆฌ์์ ํ ๋น ํด์ ๋์ง ๋ชปํ๊ณ ๋จ๊ฒ ๋ ์๋ ์๋ค. ์ด๊ฑด ๊ฐํ ์ฐธ์กฐ ์ฌ์ดํด์ฒ๋ผ ๋ฉ๋ชจ๋ฆฌ ๋์(memory leak)๋ฅผ ๋ฐ์์ํฌ ์ ์๋ค.
โ๏ธ Reference ํ์ ์ Heap
๊ณต์๋ฌธ์๋ฅผ ํตํด ์ฌ๊ธฐ๊น์ง ์ ๊ณต๋ถํ๋ค. ํ์ง๋ง ๊ทธ๊ฑธ๋ก Array์ ArraySlice ๊ฐ์ ์๋ ์ฐจ์ด๊ฐ ์ดํด๋์ง ์์๋ค. ๊ทธ๋์ ์ฒ์ ์ด ๋์ ์ฐจ์ด๋ฅผ ๋ณด๊ฒ ๋ ๋ธ๋ก๊ทธ๋ฅผ ๋ค์ ์ฝ์๋ค. ๊ทธ๋ฆฌ๊ณ '์ฐธ์กฐ ํ์ ์ Heap์์ญ์ ์ฌ์ฉ.."ํ๋ค๋ ๋ง์ ์ง์คํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ ๋ฉ๋ฆฌ ์๋ํ ์๋ ์ด์์ฒด์ ์์ ์์์ ๊ธฐ์ต์ ๋ ์ฌ๋ ธ๋ค. ๊ทธ๋์ ์ ๊ณต ์์ ์ ๊บผ๋ด ์ฐพ์ ์ฝ์๋ค. 'ํ๋ก์ธ์ค์ ๊ทธ ํ๋ก์ธ์ค๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌ๋์์ ๋..' ์ค๋ช ์ ์ฝ์ผ๋ฉฐ Stack๊ณผ Heap ์์ญ์ ๋ฐ๊ฒฌํ๋ค. ์ด๋ฐ ๋ด์ฉ์ ๋ฐฐ์ ์์ง ์๊ฐํ๋ฉฐ ์ฝ์์ง๋ง ์ ํํ๊ฒ Heap์์ญ์ ์ฐธ์กฐ ํ์ ์ด ํ ๋น๋๋ค๋ ๋ง์ ์์๋ค. ์ดํด๋ฅผ ์ํด ๊ตฌ๊ธ๋ง์ ํตํด ๋ค๋ฅธ ์ฑ ์ค๋ช , ๋ธ๋ก๊ทธ ๊ณต๋ถ ๊ธ ๋ฑ์ ์ฝ์๋ค. ๊ทธ๋ฌ๋ฉด์ ๋์จ ๊ฒฐ๊ณผ๋ ๊ผญ ๊ฐ ํ์ , ์ฐธ์กฐ ํ์ ์ด ์ด๋ค ์์ญ์ ๋ค์ด๊ฐ๋๊ฑด ์๋๋ผ๊ณ ๋ณด์๋ค. ํ์ง๋ง ์ฐธ์กฐ ํ์ ์ด Heap ์์ญ์ ํ ๋น๋๋ ๊ฑด, Heap ์์ญ์ด ๋์ ์์ญ์ด๊ธฐ ๋๋ฌธ์ด๋ผ ํ๋จํ๋ค. ๊ทธ๋ฆฌ๊ณ Stack์ ์ด๋ฆ ๊ทธ๋๋ก LIFO ๊ท์น์ ๊ฐ์ ธ ์๋๋์ด์ผ ํ๋๊น ์ง์ญ ๋ณ์, ํจ์์ ๋งค๊ฐ๋ณ์ ์ฒ๋ผ LifeTime์ด ์ ํํ ๊ฒ๋ค์ด ์ ์ฅ๋์ด์ผ ํ๋ค๊ณ ์๊ฐํ๋ค.
๊ทธ๋๋ ์ด๊ฑด ๋ด ์๊ฐ์ด๋ผ ์๋ชป ์ดํดํ ๊ฑฐ๋ฉด ์ด์ฉ์ง ์ถ์๋ค. ๊ทธ๋์ ๋ค๋ค ์ด๋ป๊ฒ ์ฐธ์กฐ ํ์ ์ด Heap ์์ญ์ด๋ผ๊ณ ํ์ ํ์๊น ์๊ฐํด ๋ธ๋ก๊ทธ ๊ธ์ ์ฐ๊ฒฐ ๋ ๋งํฌ์ ์ง์คํ๊ณ , ํญ์ ๋์์ด ๋๋ ๋ธ๋ก๊ฑฐ์ ๊ธ์์ WWDC2016 ์์์ ๋ฐ๊ฒฌํ๋ค.
๐ WWDC2016
2016๋ ์ Swift 3.0์ด ๋ฐํ๋ ํด์ด๋ค. ์์์ด ์ ํํ ์ธ์ ์๊ธฐ์ธ์ง ๋ชจ๋ฅด๊ฒ ์ง๋ง, ํด๋น ์์์ ์ดํด๋ณด๋ Swift์ ์ํ๊ณผ ๊ด๋ จํด Stack๊ณผ Heap์ ๋ค๋ฃจ๊ณ ์์๋ค. ๋ด๊ฐ ์ฐพ๋ ์์์ด์๋ค! ํ์ง๋ง ๊ทผ๋ณธ์ ์ค๋ช ํ๋ ์์์ด๋ค ๋ณด๋... 1์๊ฐ ๋ถ๋์ด์๋ค. ๊ทธ๊ฒ๋ ๋ชจ๋ ์์ด๋ก..!
๊ทธ๋๋ Apple์ ๊ฐ๋ฐ์๋ค์๊ฒ ์น์ ํด์ ๋๋ณธ๋ ๋ค ์์๊ณ , ๋ฌธ์ฅ์ ํด๋ฆญํ๋ฉด ํด๋นํ๋ ๋ถ๋ถ์ผ๋ก ์ด๋๋ ํด์ค๋ค. ์ ์๋ก๋ ๊ธ์ฝ๊ธฐ๊ฐ ๋๋ฌด ํ๋๋๊น ์ผ๋จ ๋๋ณธ์ ์ ๋ถ ์ถ๋ ฅํ๋ค. ์ ์ฝ์ด๋ณด์...๐ซจ
๐ด ๋ง๋ฌด๋ฆฌ
๊ทธ๋์ ํ๋ฃจ์ข ์ผ ์๊ณ ๋ฆฌ์ฆ ํ ๋ฌธ์ ๋ก ์ ๋ง ๋ง์ ํ๊ตญ์ด์ ์์ด๋ฅผ ์ฝ์๋ค.. ํ์ง๋ง ๊ฒฐ๊ณผ๋ ํ๋๋ ์์ด์ ์ฝ๊ฐ ํ๋ฌดํด ์งง์ ๊ธ์ด๋ผ๋ ๋จ๊ฒจ ์ด ํ๋ฃจ๋ฅผ ๋ง๋ฌด๋ฆฌํ๊ณ ์ถ์๋ค. ์ด๋ ๊ฒ๋ผ๋ ๊ธ์ ๋จ๊ธฐ๋ ์ ๋ง ํ๋ฃจ๊ฐ ๋ง๋ฌด๋ฆฌ๋๋ ๊ธฐ๋ถ์ด ๋ค๊ณ , ์ค๋ ์ ๋ง ๋ค์ํ ์ ๋ณด๋ฅผ ์ป์๊ตฌ๋ ์๊ฐ์ด ๋ ๋ค. ๊ทธ๋ฆฌ๊ณ ๋จธ๋ฆฟ์์ด ์ข ์ ๋ฆฌ๋๋ค. ์ค์ ๋ก๋ ๊ธ์ ์ฐ๋ฉด์ ์ดํดํ ๋ถ๋ถ๋ ์๋ค. ๋ด์ผ์ 1์๊ฐ ์ง๋ฆฌ ์์ด + ๊ฐ๋ฐ ์ ์ดํดํ๋ฉฐ ๊ธ๊น์ง ์ ๋ฆฌํด์ผ์ง.. ํ์ดํ !!!
'์งง์' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ ์งง์ ] 7 - ์ต๊ทผ ๊ทผํฉ๊ณผ ํ๊ณ (2) | 2024.11.12 |
---|---|
[ ์งง์ ] 6 - iOS ๊ฐ๋ฐ์๋ ์ ๋ณด์ฒ๋ฆฌ๊ธฐ์ฌ ์๊ฒฉ์ฆ์ด ํ์ํ ๊น (1) | 2024.06.19 |
[ ์งง์ ] 4 - '์ผ๊ธฐ' ๋ฆฌํฉํ ๋ง ์์! (1) | 2024.01.29 |
[ ์งง์ ] 3 - MVC ๊ณต๋ถ๋ฅผ ์์ํ๋ฉฐ (1) | 2023.10.11 |
[ ์งง์ ] 2 - UIAlertContoroller ์๋ธํด๋์ฑํ๊ธฐ (0) | 2023.08.16 |