์๋ ํ์ธ์~
์ค๋์ Copy on write์ ๋ํด์ ์ ๋ฆฌํ๋ ค๊ณ ํฉ๋๋ค.
Copy on write์ด๋
Copy on write๋ ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํด์ ์ฌ์ฉํ๋ฉด์, ์๋ณธ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋๊ธฐ ์ ๊น์ง๋ ๊ณต์ ํด์ ์ฌ์ฉํ๋ค๊ฐ ์๋ณธ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋๋ ์์ ์์ ๋ณต์ฌํ์ฌ ์์ ๋ง์ ๋ ๋ฆฝ์ ์ธ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ฒ ๋๋ ์ต์ ํ ๊ธฐ๋ฒ์ ๋งํฉ๋๋ค.
Swift์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก Array, Dictionary, Set ๋ฑ์ ๊ฐ ํ์ ์์ Copy on write๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๋ฐ๋ผ์, ๊ฐ ํ์ ์ ๋ค๋ฃฐ ๋๋ Copy on write์ ๋ํด ์ดํด๊ฐ ํ์ํฉ๋๋ค.
Copy on write์ ๋์ ์๋ฆฌ
var originArray = [1, 2, 3, 4]
var copyArray = originArray // copyArray๋ originArray์ ์ฐธ์กฐ
copyArray.append(5) // copyArray์ 5๋ฅผ ์ถ๊ฐ
print(originArray) // [1, 2, 3, 4]
print(copyArray) // [1, 2, 3, 4, 5]
์ฃผ์์ ํตํด ์ค๋ช ํ ๊ฒ์ฒ๋ผ copyArray๋ originArray๋ฅผ ์ฐธ์กฐํ๊ณ ์์ต๋๋ค.
ํ์ง๋ง copyArray์ 5๋ฅผ ์ถ๊ฐํ๋ ์๊ฐ, copyArray๋ originArray๋ก๋ถํฐ ๋ถ๋ฆฌ๋ฉ๋๋ค.
์ด๋ Copy on write ์ต์ ํ ๊ธฐ๋ฒ์ ๋์ ์๋ฆฌ์ ๋๋ค.
๋ฐ๋ผ์ originArray๋ [1, 2, 3, 4]๋ก ๋ฐ์ดํฐ๊ฐ ์ ์ง๋๊ณ copyArray๋ง [1, 2, 3, 4, 5]๋ก ๋ณ๊ฒฝ๋๊ฒ ๋ฉ๋๋ค.
์ด๋ ๊ฒ Copy on write๋ ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํด์ ์ฌ์ฉํ์ง๋ง, ์๋ณธ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ๋ค๊ฐ
๋ณ๊ฒฝ์ด ๋ฐ์ํ ๋๋ง ์ค์ ๋ก ๋ณต์ฌํ์ฌ ๋ ๋ฆฝ์ ์ธ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ฒ ๋ฉ๋๋ค.
์ด๋ ๊ฒ ํจ์ผ๋ก์จ ๋ณต์ฌ๋ฅผ ์ต์ํํ ์ ์๊ฒ ๋๋ ๊ฒ์ ๋๋ค.
Copy on write์ ํ์ฉ์์
- ํฐ ๋ฐ์ดํฐ
var bigArray = Array(1...1000000) // 100๋ง๊ฐ์ ์์๋ฅผ ๊ฐ์ง ๋ฐฐ์ด
var copyArray = bigArray // Copy on write๊ฐ ์ ์ฉ
์์ ์ฝ๋์์
์ฐธ์กฐ ์์ ์ ๊ฐ์ ๋ณต์ฌ๊ฐ ์ผ์ด๋ฌ๋ค๊ณ ๊ฐ์ ํด ๋ด ์๋ค.
ํ์ ์ฝ๋์์ bigArray ํน์ copyArray ๋ชจ๋ ๊ฐ์ ๋ณ๊ฒฝ์ด ์๋ค๋ฉด
์ฐธ์กฐ ์์ ์ ํ๋ ๋ณต์ฌ์ ๋ํ ์๊ฐ๊ณผ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ญ๋นํ๊ฒ ๋ ๊ฒ์ ๋๋ค.
๋, ๋ฐ์ดํฐ๊ฐ ํด์๋ก ๋ ๋ง์ ์๊ฐ๊ณผ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ญ๋นํ๊ฒ ๋ฉ๋๋ค.
๋ฐ๋ผ์ ํฐ ๋ฐ์ดํฐ๋ค์ ์ฐธ์กฐํด์ ์ฌ์ฉํ ๊ฒฝ์ฐ Copy on write๋ฅผ ํตํด
์ค์ ๋ณ๊ฒฝ ์ฌํญ์ด ๋ฐ์ํ์ ๊ฒฝ์ฐ๋ง
๋ณต์ฌํ๊ฒ ๋๋ค๋ฉด ๋ถํ์ํ ์๊ฐ๊ณผ ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๋ฅผ ์ต์ํํ ์ ์๊ฒ ๋๋ ๊ฒ์ ๋๋ค.
์ค๋์ ์ ์ผํ ๋ค์ด๋ง ๋ดค๋๋ฐ
์ด๋ฒ์ ์ ๋ฆฌํ๋ฉด์ ํ์คํ ์ดํด๊ฐ ๋ ๊ฒ ๊ฐ๋ค์.
๋ค๋ค ๋์์ด ๋์ จ๊ธธ ๋ฐ๋๋๋ค.
๊ทธ๋ผ ์ด๋ง ๐๐ป ๐๐ป ๐๐ป
'iOS > Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] Delegate Pattern(๋๋ฆฌ๊ฒ์ดํธ ํจํด)์ ๋ํด์ (0) | 2023.04.04 |
---|---|
[Swift] Protocol(ํ๋กํ ์ฝ)์ ๋ํด์ (0) | 2023.04.02 |
[Swift] ์ปฌ๋ ์ ํ์ (Collection Type)์ ๋ํด์ (0) | 2023.03.26 |
[Swift] Enum(์ด๊ฑฐํ)์ ๋ํด์ (0) | 2023.03.22 |
[Swift] ์ต์ ๋(Optional)์ ๋ํด์ (0) | 2023.03.17 |