Immutable
โข
immutable
โฆ
let ์ฒ๋ผ ๋ถ๋ณ์
โข
mutable
โฆ
var ์ฒ๋ผ ๊ฐ๋ณ์
struct Town {
let name: String
var citizens: [String]
var resources: [String : Int]
init(citizens: [String], name: String, resources: [String : Int]) {
self.citizens = citizens
self.name = name.uppercased()
self.resources = resources
}
func harvestRice() {
resources["Rice"] = 100
// self.resources["Rice"] = 100๊ณผ ๋์ผ
}
}
Swift
๋ณต์ฌ
โข
์์ ์์๋ฅผ ๋ณด๋ฉด, struct ๋ด๋ถ์์ ์ ๋ ๊ฒ ํจ์(๋ฉ์๋)๋ฅผ ๋ง๋ค์์ ๋, โCannot assign through subscript: โselfโ is immutableโ ์ด๋ผ๋ ๊ฒฝ๊ณ ๋ฉ์์ง๊ฐ ์ถ๋ ฅ๋๋ค.
โข
struct ๋ด๋ถ์์ โSelfโ๊ฐ ์๋์ ์ผ๋ก let์ผ๋ก ์ ์๋์ด ์๋ค.
โข
์ ํจ์์ ์ฝ๋ ๋ธ๋ญ์ self.resources[โRiceโ] = 100 ๊ณผ ๋์ผํ๊ณ , self ์ด๊ธฐ ๋๋ฌธ์ ๋ณํ ์ ์์ผ๋ฏ๋ก ๊ฒฝ๊ณ ๋ฉ์์ง๊ฐ ์ถ๋ ฅ๋๋ ๊ฒ์ด๋ค.
โข
struct ๋ด๋ถ์์ โselfโ๊ฐ ์๋์ ์ผ๋ก let์ผ๋ก ์ ์๋์ด ์๋ค.
โข
์ ํจ์์ ์ฝ๋ ๋ธ๋ญ์ self.resources[โRiceโ] = 100 ๊ณผ ๋์ผํ๊ณ , self ์ด๊ธฐ ๋๋ฌธ์ ๋ณํ ์ ์์ผ๋ฏ๋ก ๊ฒฝ๊ณ ๋ฉ์์ง๊ฐ ์ถ๋ ฅ๋๋ ๊ฒ์ด๋ค.
โข
๋ง์ฝ struct ๋ด๋ถ์์ property๋ฅผ ์์ ํ๊ณ ์ ํ๋ค๋ฉด, func ์์ โmutatingโ keyword๋ฅผ ๋ถ์ฌ์ฃผ๋ฉด ๋๋ค(๋งํน)
struct Town {
let name: String
var citizens: [String]
var resources: [String : Int]
init(citizens: [String], name: String, resources: [String : Int]) {
self.citizens = citizens
self.name = name.uppercased()
self.resources = resources
}
mutating func harvestRice() {
resources["Rice"] = 100
// self.resources["Rice"] = 100๊ณผ ๋์ผ
}
}
Swift
๋ณต์ฌ
โข
์ด๋ ๊ฒ mutating ์ ๋งํนํจ์ผ๋ก์จ ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์๋๋ค.
โข
mutating ์ผ๋ก ๋งํน์ ํ๊ฒ ๋๋ฉด โselfโ ๊ฐ โvarโ ์ฒ๋ผ ๋์ํ๊ณ , ๊ตฌ์กฐ์ฒด ๋ด๋ถ์์ ๊ตฌ์กฐ์ฒด์ property๋ฅผ ์์ ๋กญ๊ฒ ๋ณ๊ฒฝํ ์ ์๊ฒ ๋๋ค.
struct Town {
let name: String
var citizens: [String]
var resources: [String : Int]
init(citizens: [String], name: String, resources: [String : Int]) {
self.citizens = citizens
self.name = name.uppercased()
self.resources = resources
}
mutating func harvestRice() {
resources["Rice"] = 100
// self.resources["Rice"] = 100๊ณผ ๋์ผ
}
}
var myTown = Town(citizens: ["Angela", "Jack"], name : "Mytown", resources : ["Wool" : 82])
myTown.harvestRice()
print(myTown.resources)
Swift
๋ณต์ฌ
โข
์ ์ฝ๋๋ฅผ ํตํด harvestRice() ๋ฉ์๋๊ฐ ์ ์์ ์ผ๋ก ์๋ํจ์ ์ ์ ์๋ค.
โข
์ฃผ์ํด์ผ ํ ์ ์ myTown์ด var ๋ก ์ ์ธ๋์ด ์๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฅํ ์ผ์ด๋ฉฐ, ๋ง์ฝ let myTown๊ณผ ๊ฐ์ด let ์ผ๋ก ์ ์ธ๋์๋ค๋ฉด mutating ๋งํนํด์ ์ฝ๋๋ฅผ ์์ฑํ๋ค๊ณ ํด๋, ์ ์ธ ์ดํ์ struct property๋ฅผ ์์ ํ ์ ์๊ฒ ๋๋ค.