[Swift] self νλ‘νΌν° (feat. mutating, νμ λ©μλ)
π‘self νλ‘νΌν°?
μΈμ€ν΄μ€λ₯Ό λ λͺ ννκ² μ§μΉνκ³ μΆμ λ μ¬μ©
μ€μννΈλ μλμΌλ‘ λ©μλ λ΄λΆμ μ μΈλ μ§μλ³μ -> λ©μλ λ§€κ°λ³μ -> μΈμ€ν΄μ€ νλ‘νΌν°λ₯Ό μ°Ύμ μ§μ νλ κ²μ μ μΆνλ€.
μ΄λ, self νλ‘νΌν°λ₯Ό μ¬μ©νμ¬ λ©μλμμ λ§€κ°λ³μκ° μλ μΈμ€ν΄μ€ νλ‘νΌν°λ₯Ό μ§μΉν μ μλ€.
β°self νλ‘νΌν°μ λ€λ₯Έ μ©λ
κ° νμ μΈμ€ν΄μ€ μ체μ κ°μ μΉνν μ μλ€.
ν΄λμ€μ μΈμ€ν΄μ€λ μ°Έμ‘° νμ μ΄λΌμ self νλ‘νΌν°μ λ€λ₯Έ μ°Έμ‘°λ₯Ό ν λΉν μ μλλ°, ꡬ쑰체λ μ΄κ±°ν λ±μ self νλ‘νΌν°λ₯Ό μ¬μ©νμ¬ μμ μ체λ₯Ό μΉνν μ μλ€.
β°self νλ‘νΌν°μ mutating ν€μλ
mutating ν€μλ ?
- μμ μ νλ‘νΌν° κ°μ μμ ν λ ν΄λμ€μ μΈμ€ν΄μ€ λ©μλλ ν¬κ² μ κ²½μΈ νμκ° μμ§λ§, ꡬ쑰체λ μ΄κ±°ν λ±μ κ° νμ μ΄λ―λ‘ λ§€μλ μμ mutating ν€μλλ₯Ό λΆμ¬μ ν΄λΉ λ©μλκ° μΈμ€ν΄μ€ λ΄λΆμ κ°μ λ³κ²½νλ€λ κ²μ λͺ μν΄μΌνλ€.
class LevelClass{
var level: Int = 0
func reset() {
// μ€λ₯! self νλ‘νΌν° μ°Έμ‘° λ³κ²½ λΆκ°!
self = LevelClass()
}
}
struct LevelStruct{
var level: Int = 0
mutating func levelUp() {
print("Level Up")
level += 1
}
mutating func reset() {
print("Reset!")
self = LevelStruct()
}
}
β° νμ λ©μλμμμ self νλ‘νΌν°
νμ λ©μλμμλ μΈμ€ν΄μ€ λ©μλμλ λ¬λ¦¬ self νλ‘νΌν°κ° νμ κ·Έ μ체λ₯Ό κ°λ¦¬ν¨λ€.
κ·Έλμ νμ λ©μλ λ΄λΆμμ νμ μ΄λ¦κ³Ό selfλ κ°μ λ»!
νμ λ©μλμμ self νλ‘νΌν°λ₯Ό μ¬μ©νλ©΄ νμ νλ‘νΌν° λ° νμ λ©μλλ₯Ό νΈμΆν μ μλ€.
π‘νμ λ©μλ
- νμ μ체μ νΈμΆμ΄ κ°λ₯ν λ©μλ
- λ©μλ μμ static ν€μλλ₯Ό μ¬μ©νμ¬ νν
- static ν€μλλ‘ μ μ -> μμ ν λ©μλ μ¬μ μκ° λΆκ°λ₯
- class ν€μλλ‘ μ μ -> μμ ν λ©μλ μ¬μ μκ° κ°λ₯
Reference
Swift μ€μννΈ νλ‘κ·Έλλ° - μΌκ³°