ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Swift] ์ธ์Šคํ„ด์Šค(instance)
    iOS/Swift 2022. 8. 3. 23:45

     

    ๐Ÿ’ก ํ•™์Šตํ•  ๋‚ด์šฉ
    1. ๊ธฐ๋ณธ๊ฐ’ ํ• ๋‹น
    2. ์ด๋‹ˆ์…œ๋ผ์ด์ €
    3. ์˜ต์…”๋„
    4. ์‹คํŒจ ๊ฐ€๋Šฅํ•œ ์ด๋‹ˆ์…œ๋ผ์ด์ €
    5. ๋””์ด๋‹ˆ์…œ๋ผ์ด์ €

    ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ์ด ๋˜๊ธฐ ์ „ ํ”„๋กœํผํ‹ฐ ๊ฐ’๋“ค์ด ์ดˆ๊ธฐํ™”๊ฐ€ ๋˜์–ด์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    ๋งŒ์•ฝ ์ดˆ๊ธฐ๊ฐ’์ด ์—†๋Š” ํด๋ž˜์Šค๋ฅผ ์„ ์–ธํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”?

    class StudentB {
        var name: String
        var age: Int
        var major: String
    

    class StudentB์— ์ดˆ๊ธฐ๊ฐ’์ด ์—†๋‹ค๋Š” ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

     

     

    ๐Ÿ’ก ํ”„๋กœํผํ‹ฐ ๊ฐ’์„ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ด…์‹œ๋‹ค.

     

    1. ๊ธฐ๋ณธ๊ฐ’ ํ• ๋‹น

    ๋ชจ๋“  ์ €์žฅ ํ”„๋กœํผํ‹ฐ์— ๊ธฐ๋ณธ๊ฐ’์„ ํ• ๋‹นํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

    ๋”ฐ๋กœ ์ด๋‹ˆ์…œ๋ผ์ด์ €๋ฅผ ํ†ตํ•ด ์ดˆ๊ธฐ๊ฐ’์„ ํ• ๋‹นํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค.

    ์˜ˆ์‹œ)

    class StudentA {
        var name: String = " "  //์ด๋ฆ„
        var age: Int = 0        //๋‚˜์ด
        var major: String = " " //์ „๊ณต
    }
    
    // ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ
    let John: StudentA = StudentA()
    
    // ์ธ์Šคํ„ด์Šค ์‚ฌ์šฉ
    John.name = "John"
    John.age = 24
    John.major = "Digital Media"
    

    2. ์ด๋‹ˆ์…œ๋ผ์ด์ €(init)

    init ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ”„๋กœํผํ‹ฐ ๊ธฐ๋ณธ๊ฐ’์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋”๋ผ๋„ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ์ด ๋์„ ๋•Œ ์›ํ•˜๋Š” ๊ฐ’๋“ค์„ ๋„ฃ์–ด์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ์˜ˆ์‹œ)

    class StudentB {
        var name: String
        var age: Int
        var major: String
    
    // ์ด๋‹ˆ์…œ๋ผ์ด์ €๋กœ ์ดˆ๊ธฐ๊ฐ’ ์„ค์ •
        init(name: String, age: Int, major: String) {
            self.name = name
            self.age = age
            self.major = major
    		}
    }
    
    let Jessi: StudentB = StudentB(name: "Jessi", age: 23, major: "Visual Design")
    

     

    self๋ž€?

    - ๋ณ€์ˆ˜๋ช…์— self๋ฅผ ๋ถ™์—ฌ์„œ ์ด๋ฆ„์ด ๊ฐ™๋”๋ผ๋„ ์„œ๋กœ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

    - init ํ‚ค์›Œ๋“œ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ช…(name)๊ณผ ๋ณ€์ˆ˜๋ช…(name)์ด ๊ฐ™์€ ๊ฒฝ์šฐ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋ญ˜ ๋งํ•˜๋Š” ๊ฑด์ง€ ํ—ท๊ฐˆ๋ คํ•ฉ๋‹ˆ๋‹ค๐Ÿ˜…

     

    3. ์˜ต์…”๋„

    ํ”„๋กœํผํ‹ฐ ๊ฐ’์ด ๊ผญ ํ•„์š”ํ•œ ๊ฒƒ์ด ์•„๋‹˜์„ ๋ช…์‹œํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์˜ต์…”๋„์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ์˜ต์…”๋„ ํ”„๋กœํผํ‹ฐ๋Š” ์ดˆ๊ธฐํ™”ํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค.

    ์˜ˆ์‹œ)

    class StudentC {
        var name: String
        var age: Int
        var major: String?      //์˜ต์…”๋„
        
        //ํ”„๋กœํผํ‹ฐ 3๊ฐœ ๊ฐ’ ๋ชจ๋‘ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๊ฒฝ์šฐ
        init(name: String, age: Int, major: String) {
            self.name = name
            self.age = age
            self.major = major
        }
        
        //์˜ต์…”๋„์„ ์ œ์™ธํ•œ 2๊ฐœ ๊ฐ’์„ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๊ฒฝ์šฐ
        init(name: String, age: Int) {
            self.name = name
            self.age = age
        }
    }
    
    // ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ
    let Jenny: StudentC = StudentC (name: "Jenny", age: 25)
    let Mike: StudentC = StudentC (name: "Mike", age: 21, major: "Design")
    
    • ์•”์‹œ์  ์ถ”์ถœ ์˜ต์…”๋„
      class Puppy {
          var name: String
          var owner: StudentC!
          
          init(name: String) {
              self.name = name
          }
          
          func goOut() {
              print("\\(name)๊ฐ€ ์ฃผ์ธ \\(owner.name)์™€ ์‚ฐ์ฑ…์„ ํ•ฉ๋‹ˆ๋‹ค")
          }
      }
      
      // ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ
      let cloud: Puppy = Puppy(name: "cloud")
      
      // cloud.goOut()    //์ฃผ์ธ์€ ์•„์ง nil์ธ ์ƒํƒœ์ด๋‹ค
      cloud.owner = Jenny
      cloud.goOut()
      
      ์ฃผ์˜ํ•  ์ ์€ owner์˜ ๊ฐ’์„ ์•”์‹œ์  ์ถ”์ถœ ์˜ต์…”๋„๋กœ ์„ ์–ธํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— owner ํ”„๋กœํผํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋ฐ”๋กœ ํ˜ธ์ถœํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค(์•„์ง owner์˜ ๊ฐ’์€ nil์ธ ์ƒํƒœ์ด๊ธฐ ๋•Œ๋ฌธ)
    • owner์— ๊ฐ’์„ ํ• ๋‹นํ•œ ๋’ค ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • ์ธ์Šคํ„ด์Šค ์‚ฌ์šฉ์— ๊ผญ ํ•„์š”ํ•˜์ง€๋งŒ ์ดˆ๊ธฐ๊ฐ’์„ ํ• ๋‹นํ•˜๊ณ  ์‹ถ์ง€ ์•Š์„ ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

     

    4. ์‹คํŒจ ๊ฐ€๋Šฅํ•œ ์ด๋‹ˆ์…œ๋ผ์ด์ €

    • ์ด๋‹ˆ์…œ๋ผ์ด์ €์˜ ์ „๋‹ฌ์ธ์ž๋กœ ์ž˜๋ชป๋œ ๊ฐ’์ด๋‚˜ ์ ์ ˆํ•˜์ง€ ๋ชปํ•œ ๊ฐ’์ด ์ „๋‹ฌ๋˜์—ˆ์„ ๋•Œ ์‹คํŒจ ๊ฐ€๋Šฅ์„ฑ์„ ๋‚ดํฌํ•œ ์ด๋‹ˆ์…œ๋ผ์ด์ €๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • init? ํ‚ค์›Œ๋“œ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ์˜ˆ์‹œ)

    class StudentD {
        let name: String
        let age: Int?
        
        init?(name: String, age: Int) {
            if name.isEmpty || age < 0{
                return nil
            }
            self.name = name
            self.age = age
        }
    }
    

    init? ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— return ๊ฐ’์œผ๋กœ nil์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

     

    5. ๋””์ด๋‹ˆ์…œ๋ผ์ด์ €

    ํด๋ž˜์Šค์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ , ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์†Œ๋ฉธ๋˜๊ธฐ ์ „ ์ •๋ฆฌ ์ž‘์—…์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

     

    ์˜ˆ์‹œ)

    class Person {
        var name: String
        var pet: Puppy? //์˜ต์…”๋„
        var child: StudentC
        
        init(name: String, child: StudentC) {
            self.name = name
            self.child = child
        }
        
        deinit {
            if let petName = pet?.name {
                print("\(name)๊ฐ€ \(child.name)์—๊ฒŒ \(petName)์„ ์ธ๋„ํ•ฉ๋‹ˆ๋‹ค")
                self.pet?.owner = child
            }
        }
    }
    
    // ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ
    let donald: Person? = Person(name: "Donald", child: Jenny)

     

Designed by Tistory.