[Swift] μΈμ€ν΄μ€(instance)
π‘ νμ΅ν λ΄μ©
- κΈ°λ³Έκ° ν λΉ
- μ΄λμ λΌμ΄μ
- μ΅μ λ
- μ€ν¨ κ°λ₯ν μ΄λμ λΌμ΄μ
- λμ΄λμ λΌμ΄μ
μΈμ€ν΄μ€κ° μμ±μ΄ λκΈ° μ νλ‘νΌν° κ°λ€μ΄ μ΄κΈ°νκ° λμ΄μμ΄μΌ ν©λλ€.
λ§μ½ μ΄κΈ°κ°μ΄ μλ ν΄λμ€λ₯Ό μ μΈνλ©΄ μ΄λ»κ² λ κΉμ?
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")
- μμμ μΆμΆ μ΅μ
λ
μ£Όμν μ μ ownerμ κ°μ μμμ μΆμΆ μ΅μ λλ‘ μ μΈνκΈ° λλ¬Έμ owner νλ‘νΌν°λ₯Ό μ¬μ©νλ ν¨μλ₯Ό λ°λ‘ νΈμΆνλ©΄ μλ¬κ° λ°μν©λλ€(μμ§ ownerμ κ°μ nilμΈ μνμ΄κΈ° λλ¬Έ)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μ κ°μ ν λΉν λ€ ν¨μλ₯Ό νΈμΆν΄μΌ ν©λλ€.
- μΈμ€ν΄μ€ μ¬μ©μ κΌ νμνμ§λ§ μ΄κΈ°κ°μ ν λΉνκ³ μΆμ§ μμ λ μ¬μ©ν μ μμ΅λλ€.
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)