728x90
mutating์ด๋?!
๊ฐ ํ์ (๊ตฌ์กฐ์ฒด์ ์ด๊ฑฐํ)์ ์ธ์คํด์ค ๋ฉ์๋์์ ์์ ๋ด๋ถ์ ๊ฐ์ ๋ณ๊ฒฝํ๊ณ ์ ํ ๋ ์ฌ์ฉํ๋ ํค์๋.
๊ตฌ์กฐ์ฒด ๋ฉ์๋์์ ๊ตฌ์กฐ์ฒด ํ๋กํผํฐ๋ฅผ ์์ ํ ๋๋ mutating ํค์๋๋ฅผ ์ฌ์ฉํด ํด๋น ๋ฉ์๋๊ฐ ํธ์ถ ๋์์๋ ํ๋กํผํฐ๊ฐ ๋ณ๊ฒฝ ๋ ์ ์์์ ๋ช ์ํด์ผ ํฉ๋๋ค.
struct Person {
var name = "ํ๊ธธ๋"
mutating func changeName(name: String) {
self.name = name
}
}
var person = Person()
var person2 = person // ์ฐธ์กฐ
var person3 = person // ์ฐธ์กฐ
p2.x = 3 //COW ์ค์ ๋ณต์ฌ๊ฐ ์ผ์ด๋จ
๋ ์์๋ณผ๊น์?!
- ๋ณดํต ๊ฐ ํ์
์ ํ๋กํผํฐ๋ ์ธ์คํด์ค ๋ฉ์๋์์ ์์ ํ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ๊ตฌ์กฐ์ฒด๋ ์ด๊ฑฐํ์ ์ธ์คํด์ค ๋ฉ์๋์์ ํ๋กํผํฐ๋ฅผ ์์ ํ๊ธธ ์ํ๋ค๋ฉด mutating์ ์ฑํํด์ ํ ์ ์์ต๋๋ค.
mutating์ ์ฑํํ๋ฉด ๋ฉ์๋ ๋ด์์ ํ๋กํผํฐ๋ฅผ ๋ณ๊ฒฝํ ์ ์์ผ๋ฉฐ ๋ฉ์๋๊ฐ ์ข ๋ฃ๋๋ฉด ๋ณ๊ฒฝ ๋ด์ฉ์ด ์๋ ๊ตฌ์กฐ์ ๋ค์ ๊ธฐ๋ก๋๋ ๋ฐฉ์์ ๋๋ค. - Struct๋ ๊ฐ ํ์ ์ด๋ผ์ ์คํ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ์ด ๋๊ณ , ํ ๋ด๋ถ์ ์กด์ฌํ์ง ์๊ธฐ ๋๋ฌธ์ ๊ตฌ์กฐ์ฒด๋ฅผ ์ ๋ฌํ ๋ ๊ณ์ํด์ ๋ณต์ฌ๋ฉ๋๋ค.
- swift๋ ๊ฐ์ด ๋ณ๊ฒฝ๋ ๋๋ง ์ค์ ๋ณต์ฌ๋ฅผ ํ๋ COW(copy on write)๋ฐฉ์์ ์ฑ์ฉํ๊ณ ์๋๋ฐ ๊ตฌ์กฐ์ฒด ํ๋กํผํฐ๋ ๊ฐ์ ๋ณ๊ฒฝํ ๋ swift๊ฐ ์ง๊ด์ ์ผ๋ก ์ ์ ์์ง๋ง, ๊ตฌ์กฐ์ฒด ๋ฉ์๋์์ mutating ํค์๋ ์์ด ํ๋กํผํฐ๋ฅผ ๋ณ๊ฒฝํ๊ฒ๋๋ฉด ์ธ์ ์ค์ ๋ก ๋ณต์ฌ๋ฅผ ํด์ผํ๋์ง ์ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ mutating ํค์๋๋ ํด๋น ๋ฉ์๋๊ฐ ํธ์ถ๋๋ฉด ์ค์ ๋ณต์ฌ๋ฅผ ํด์ผํ๋ค๊ณ ์๋ ค์ฃผ๋ ์ญํ ์ ํ๋ค๊ณ ๋ณผ ์ ์์ต๋๋ค.
- ๋ณ์์ mutating์ ์ ์ฐ๋ ์ด์ ๋ var, let ํค์๋๋ฅผ ํตํด ์ด๋ฏธ ์ปดํ์ผ๋ฌ๊ฐ ์๊ณ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
- mutating ๋ฉ์๋๋ ์์์ ์ธ ์์ฑ์ธ self์ ์์ ํ ์๋ก์ด ์ธ์คํด์ค๋ฅผ ํ ๋นํ ์ ์์ต๋๋ค.
struct Money {
var myMoney = 0
mutating func spendMoney(myMoney deltaMoney: Int) {
self = Money(myMoney: myMoney - deltaMoney)
}
}
728x90
'๐ Apple > Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] Firestore์์ Document Id๋ฅผ ๋ณ๊ฒฝํ๊ณ ์ถ์ด์.. (1) | 2024.01.22 |
---|---|
[Swift] DEBUG, RELEASE ๋ถ๊ธฐ ์ฒ๋ฆฌํ ๊ฑฐ์์ (Swift Compiler, ์ ์ฒ๋ฆฌ๋ฌธ, #if DEBUG) (0) | 2024.01.13 |
[Swift] DI(Dependency Injection) ์์กด์ฑ ์ฃผ์ - ํ๋กํ ์ฝ (1) | 2023.12.30 |
[Swift] Result ํ์ (0) | 2023.12.26 |
[Swift] dropFirst()์ removeFirst()์ ์ฐจ์ด (0) | 2023.09.01 |