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.