Mutating Method - Methods
์ด ํค์๋๊ฐ ํ์ํ ์ด์
struct์ enum ์ ๊ฐ ํ์ ์ ๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ ํ์ ์ ์์ฑ์ ์ธ์คํด์ค ๋ฉ์๋ ๋ด๋ถ์์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
์์ฑ์ ๋ณ๊ฒฝํ ์ ์๊ธฐ ๋๋ฌธ์, implicit property ์ธ `self` ๋ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
์ถ๊ฐ์ ์ผ๋ก ์๋ฌ๋ฉ์์ง ๋ด์ฉ์ด ์ make `x` mutable ์ด ์๋ make `self` mutable ์ธ์ง ์๊ฐํด๋ณด๋ฉด,
๋ฉ์๋ ๋ฐ๋์์ x ๋ y๋ implicitly ํ๊ฒ ํํ๋ ๊ฒ์ด๊ณ , ์ฌ์ค์ self.x , self.y์ด๊ธฐ ๋๋ฌธ์ ๋๋ค.
๋ณ๊ฒฝํ ์ ์๊ฒ ํ๋ ๋ฐฉ๋ฒ
func ์์ `mutating` ํค์๋๋ฅผ ๋ถ์ฌ์ค๋๋ค.
๋ถ์ฌ์ฃผ๋ฉด ์ธ์คํด์ค ์์ฑ์ ์์ ํ ์ ์๊ฒ ๋ฉ๋๋ค.
๋ฉ์๋๊ฐ ์คํ ์ข
๋ฃ๋๋ฉด ๋ณ๊ฒฝ๋ ๊ฐ์ ์ธ์คํด์ค ์์ฑ์ ๋ฎ์ด ์์ฐ๋ ๋ฐฉ์์
๋๋ค.
๋ํ self๋ฅผ ํตํด ์ธ์คํด์ค๋ฅผ ์์ ์๋ก์ด ๊ฒ์ผ๋ก ๋ฐ๊ฟ ์ ๋ ์๊ฒ ๋ฉ๋๋ค.
๊ด๋ จ ์ฝ๋
struct Point {
var x = 0.0, y = 0.0
mutating func realmoveBy(x deltaX: Double, y deltaY: Double) {
x += deltaX
y += deltaY
}
}
var somePoint = Point(x: 1.0, y: 1.0)
//mutating method
somePoint.moveBy(x: 2.0, y: 3.0)
// "The point is now at (3.0, 4.0)"
์ฐธ๊ณ ์ฌํญ
`let`์ struct ๊ฐ ์ ์ฅ๋๋ฉด, ๊ทธ ์ธ์คํด์ค์ ์์ฑ์ด ์ ๋ถ `let` ์ผ๋ก ์ทจ๊ธ๋๋ ์ ๊ธฐ์ตํ์๋์?
๊ด๋ จ ๊ธ: Value Type vs Reference Type
๋ฐ๋ผ์ let์ ์ ์ฅ๋ struct์ mutating method๋ฅผ ํธ์ถํ๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ ๊ฒ์ ๋๋ค.
๋!