iOS/Swift

[Swift] μΈμŠ€ν„΄μŠ€(instance)

year.number 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)