TIL - Swift์˜ self ํ‚ค์›Œ๋“œ ๐ŸŽฏ

jeongmuyametteยท2024๋…„ 11์›” 21์ผ

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
5/72
post-thumbnail

TIL - Swift์˜ self ํ‚ค์›Œ๋“œ ๐ŸŽฏ

self๋ž€? ๐Ÿค”

self๋Š” ํ˜„์žฌ ์ธ์Šคํ„ด์Šค(๊ฐ์ฒด) ์ž์‹ ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ํŠน๋ณ„ํ•œ ํ‚ค์›Œ๋“œ์˜ˆ์š”. ์‰ฝ๊ฒŒ ๋งํ•ด์„œ "๋‚˜ ์ž์‹ "์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค!

self์˜ ์ฃผ์š” ์‚ฌ์šฉ ์ผ€์ด์Šค ๐Ÿ“

1. ํ”„๋กœํผํ‹ฐ ๊ตฌ๋ถ„ํ•˜๊ธฐ โญ๏ธ

class Person {
    let name: String
    
    init(name: String) {
        // self.name์€ ํ”„๋กœํผํ‹ฐ, name์€ ํŒŒ๋ผ๋ฏธํ„ฐ
        self.name = name
    }
}

2. ๋ฉ”์„œ๋“œ ๋‚ด์—์„œ ์ž์‹ ์„ ์ฐธ์กฐํ•  ๋•Œ ๐Ÿ”„

class Counter {
    var count = 0
    
    func increment() {
        // ํ˜„์žฌ ์ธ์Šคํ„ด์Šค์˜ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ
        self.count += 1
    }
}

3. ํด๋กœ์ €์—์„œ ๊ฐ์ฒด ์บก์ฒ˜ํ•˜๊ธฐ ๐Ÿ“ฆ

class ViewController {
    func fetchData() {
        NetworkManager.getData { [weak self] result in
            // self๋ฅผ ์•ฝํ•œ ์ฐธ์กฐ๋กœ ์‚ฌ์šฉ
            self?.handleResult(result)
        }
    }
}

4. ํƒ€์ž… ๋ฉ”์„œ๋“œ์—์„œ ํƒ€์ž… ์ž์ฒด ์ฐธ์กฐ ๐Ÿ“š

struct Math {
    static func double(_ number: Int) -> Int {
        return number * 2
    }
    
    static func quadruple(_ number: Int) -> Int {
        // ๊ฐ™์€ ํƒ€์ž…์˜ ๋‹ค๋ฅธ ํƒ€์ž… ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ
        return Self.double(Self.double(number))
    }
}

self๊ฐ€ ํ•„์š”ํ•œ ์ƒํ™ฉ ๐ŸŽˆ

1. ์ด๋ฆ„์ด ๊ฒน์น  ๋•Œ

class Student {
    let name: String
    
    init(name: String) {
        self.name = name  // ํ•„์ˆ˜!
    }
}

2. ํด๋กœ์ € ๋‚ด๋ถ€์—์„œ

class GameManager {
    var score = 0
    
    func startGame() {
        Timer.scheduledTimer { [weak self] _ in
            self?.score += 1  // self ํ•„์š”
        }
    }
}

3. ๋ฉ”์„œ๋“œ ์ฒด์ด๋‹

class ChainBuilder {
    func doSomething() -> Self {
        // ์ž‘์—… ์ˆ˜ํ–‰
        return self
    }
    
    func doAnotherThing() -> Self {
        // ๋‹ค๋ฅธ ์ž‘์—… ์ˆ˜ํ–‰
        return self
    }
}

// ์‚ฌ์šฉ ์˜ˆ์‹œ
let builder = ChainBuilder()
    .doSomething()
    .doAnotherThing()

์‹ค์ƒํ™œ ๋น„์œ  ๐ŸŒŸ

  • self๋Š” ๊ฑฐ์šธ์„ ๋ณด๋Š” ๊ฒƒ๊ณผ ๊ฐ™์•„์š”
  • ๋‚ด๊ฐ€ ๋‚˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฒƒ์ฒ˜๋Ÿผ, ๊ฐ์ฒด๊ฐ€ ์ž์‹ ์„ ๊ฐ€๋ฆฌํ‚ด
  • ์—ฌ๋Ÿฌ ์‚ฌ๋žŒ ์ค‘์—์„œ "์ €์š”!"๋ผ๊ณ  ์†์„ ๋“œ๋Š” ๊ฒƒ๊ณผ ๋น„์Šท

์ฃผ์˜ํ•  ์  โš ๏ธ

  1. ๋ฉ”๋ชจ๋ฆฌ ์ˆœํ™˜ ์ฐธ์กฐ ์กฐ์‹ฌํ•˜๊ธฐ
class MyClass {
    var closure: (() -> Void)?
    
    func setup() {
        // [weak self] ์‚ฌ์šฉํ•ด์„œ ์ˆœํ™˜ ์ฐธ์กฐ ๋ฐฉ์ง€
        closure = { [weak self] in
            self?.doSomething()
        }
    }
}
  1. ๋ถˆํ•„์š”ํ•œ self ์‚ฌ์šฉ ํ”ผํ•˜๊ธฐ
class SimpleClass {
    var name: String = ""
    
    func printName() {
        // self ์—†์ด๋„ ๋จ
        print(name)
        
        // ๋ถˆํ•„์š”ํ•œ self ์‚ฌ์šฉ
        print(self.name)
    }
}

์ •๋ฆฌ โœจ

  • self๋Š” ์ธ์Šคํ„ด์Šค ์ž์‹ ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ํ‚ค์›Œ๋“œ
  • ์ฃผ๋กœ ์ด๋ฆ„ ์ถฉ๋Œ ํ•ด๊ฒฐ์— ์‚ฌ์šฉ
  • ํด๋กœ์ €์—์„œ ์ค‘์š”ํ•œ ์—ญํ• 
  • ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์— ์ฃผ์˜ ํ•„์š”

๋” ๊ณต๋ถ€ํ•  ๊ฒƒ ๐Ÿ“š

  • ํด๋กœ์ €์™€ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ
  • ํƒ€์ž… ๋ฉ”์„œ๋“œ์™€ self
  • ๊ฐ’ ํƒ€์ž…๊ณผ ์ฐธ์กฐ ํƒ€์ž…์—์„œ์˜ self ์ฐจ์ด

#Swift #iOS #self #TIL #๊ฐœ๋ฐœ๊ณต๋ถ€

profile
์–‘์ •๋ฌด

0๊ฐœ์˜ ๋Œ“๊ธ€