iOS/๐ŸŸ  Swift

Mutating Method - Methods

woozzang 2021. 1. 18. 23:28

์ด ํ‚ค์›Œ๋“œ๊ฐ€ ํ•„์š”ํ•œ ์ด์œ 

struct์™€  enum ์€ ๊ฐ’ ํƒ€์ž… ์ž…๋‹ˆ๋‹ค.

 

๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฐ’ ํƒ€์ž…์˜ ์†์„ฑ์€ ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ ๋‚ด๋ถ€์—์„œ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์†์„ฑ์€ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์—, implicit property ์ธ `self` ๋„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

 

 

Non-Mutating method

 

์ถ”๊ฐ€์ ์œผ๋กœ ์—๋Ÿฌ๋ฉ”์‹œ์ง€ ๋‚ด์šฉ์ด ์™œ 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๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

let์œผ๋กœ ์ดˆ๊ธฐํ™”๋œ ์†์„ฑ์ด๋ฏ€๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

 

 

 

 

๋!