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 ์Šค์œ„ํ”„ํŠธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ์•ผ๊ณฐ