Swift

[Swift] self ν”„λ‘œνΌν‹° (feat. mutating, νƒ€μž…λ©”μ„œλ“œ)

yevdev 2022. 3. 19. 14:44

πŸ’‘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 μŠ€μœ„ν”„νŠΈ ν”„λ‘œκ·Έλž˜λ° - μ•Όκ³°