iOS/Swift

[Swift] Copy on write(COW)์— ๋Œ€ํ•ด์„œ

๊ฒฝํ‘ธ 2023. 3. 30. 18:30
๋ฐ˜์‘ํ˜•

์•ˆ๋…•ํ•˜์„ธ์š”~

 

์˜ค๋Š˜์€ 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๋ฅผ ํ†ตํ•ด

์‹ค์ œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๋ฐœ์ƒํ–ˆ์„ ๊ฒฝ์šฐ๋งŒ

๋ณต์‚ฌํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ๋ถˆํ•„์š”ํ•œ ์‹œ๊ฐ„๊ณผ ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๋ฅผ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

 


์˜ค๋ž˜์ „์— ์–ผํ• ๋“ค์–ด๋งŒ ๋ดค๋Š”๋ฐ

์ด๋ฒˆ์— ์ •๋ฆฌํ•˜๋ฉด์„œ ํ™•์‹คํžˆ ์ดํ•ด๊ฐ€ ๋œ ๊ฒƒ ๊ฐ™๋„ค์š”.

๋‹ค๋“ค ๋„์›€์ด ๋˜์…จ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค.

 

 

๊ทธ๋Ÿผ ์ด๋งŒ ๐Ÿ‘‹๐Ÿป ๐Ÿ‘‹๐Ÿป ๐Ÿ‘‹๐Ÿป

๋ฐ˜์‘ํ˜•