Skip to content

Latest commit

Β 

History

History
167 lines (108 loc) Β· 4.57 KB

2021-09-02-Initialization .md

File metadata and controls

167 lines (108 loc) Β· 4.57 KB

Initialization (μ΄ˆκΈ°ν™”)

μƒμ„±μžλž€?(Initializer)

ꡬ쑰체, 클래슀, μ—΄κ±°ν˜•μ— λŒ€ν•œ μΈμŠ€ν„΄μŠ€λ₯Ό 생성할 λ•Œ μ €μž₯ 속성에 λŒ€ν•œ μ΄ˆκΈ°κ°’μ„ μ„€μ •ν•΄μ•Ό ν•œλ‹€.

Why?

μ΄ˆκΈ°κ°’μ΄ μ„€μ •λ˜μ–΄ μžˆμ§€ μ•ŠμœΌλ©΄ μ €μž₯ 속성을 μ €μž₯ν•˜κΈ° μœ„ν•œ 고유의 데이터 μ €μž₯ 곡간이 μƒκΈ°λŠ”λ° μ΄λ•Œ μ–΄λ– ν•œ 값도 λ“€μ–΄ μžˆμ§€ μ•Šλ‹€λ©΄ 였λ₯˜κ°€ λ°œμƒν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.

(μ—΄κ±°ν˜•μ˜ 경우 λ©”λͺ¨λ¦¬ 곡간이 ν•„μš”ν•œ μ €μž₯ 속성은 μ„ μ–Έν•  수 μ—†λ‹€.)

Q) 그럼 계산 속성은 μ΄ˆκΈ°ν™”λ₯Ό μ•ˆν•΄μ€˜λ„ λ˜λŠ”κ°€?

A) YES --> 계산 속성은 λ©”μ„œλ“œλ‘œ μ·¨κΈ‰

μ΄ˆκΈ°ν™” λ©”μ„œλ“œλŠ” ν•¨μˆ˜μ΄λ‹€. init()μ΄λΌλŠ” λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•œλ‹€. λ©”μ„œλ“œλŠ” funcλ₯Ό μ•žμ— λΆ™ν˜€μ€˜μ•Ό ν•˜λŠ”κ±° μ•„λ‹Œκ°€ μ‹Άμ§€λ§Œ μŠ€μœ„ν”„νŠΈμ˜ μ•½μ†μœΌλ‘œ init()만 κ΅¬ν˜„ν•΄μ£Όλ©΄ λœλ‹€.

init()을 λ”°λ‘œ ν•˜μ§€ μ•Šμ•„λ„ λ˜λŠ” 경우

  1. ꡬ쑰체의 경우 --> init() + λ©€λ²„μ™€μ΄μ¦ˆ μ΄λ‹ˆμ…œλΌμ΄μ € 제곡

  2. ν΄λž˜μŠ€μ—μ„œ λͺ¨λ“  μ €μž₯ μ†μ„±μ˜ μ΄ˆκΈ°ν™”κ°€ μ‘΄μž¬ν•˜λŠ” 경우

    // μ €μž₯ μ†μ„±μ˜ μ΄ˆκΈ°κ°’μ΄ μžˆλŠ” 경우 init()을 κ΅¬ν˜„ν•˜μ§€ μ•Šμ•„λ„ λœλ‹€. (μžλ™ 생성)
    class Aclass {
        let a = 3
        let b = 4
      
      //init() { } ---> μƒλž΅
    }
    
    let a = Aclass()
    //
    class Aclass {
        let a : Int
        let b : Int
        var c : Int {
            return a + b
        }
        
        init(a: Int, b: Int) {
            self.a = a
            self.b = b
        }
    }
    
    let a = Aclass(a: 3, b: 4)
    print(a.c) // 7

Designated init(지정 μƒμ„±μž)

init() ν˜•νƒœλ₯Ό κ°€μ§€λŠ” μƒμ„±μžλ₯Ό 지정 μƒμ„±μžλΌκ³  ν•œλ‹€.

지정 μƒμ„±μžλŠ” λͺ¨λ“  μ €μž₯ 속성을 μ΄ˆκΈ°ν™”ν•΄μ•Ό ν•œλ‹€. λͺ¨λ“  μƒμ„±μžλŠ” μ˜€λ²„λ‘œλ”©μ΄ κ°€λŠ₯ν•˜λ‹€.

μ˜€λ²„λ‘œλ”©μ΄λž€?

λ™μΌν•œ ν•¨μˆ˜λͺ…을 가지고 νŽΈμ˜μ™€ λͺ©μ μ„ μœ„ν•΄ νŒŒλΌλ―Έν„°μ˜ λ‹€μ–‘ν•œ ν˜•νƒœλ‘œ μƒμ„±ν•˜λŠ” 것

단, μ˜€λ²„λ‘œλ”©μ˜ κ²½μš°μ—λ„ λͺ¨λ“  μ €μž₯ 속성을 μ΄ˆκΈ°ν™”ν•΄μ•Ό ν•œλ‹€λŠ” 원칙은 λ³€ν•˜μ§€ μ•ŠλŠ”λ‹€.

image-20210902192032082

Convenience init (편의 μƒμ„±μž)

지정 μƒμ„±μžλ³΄λ‹€ 적은 νŒŒλΌλ―Έν„°λ₯Ό 가지고 νŽΈλ¦¬ν•˜κ²Œ μƒμ„±ν•˜κΈ° μœ„ν•œ μƒμ„±μžμ΄λ‹€.

νŽΈμ˜λΌλŠ” 말이 뢙은 κ²ƒμ²˜λŸΌ μ΄ˆκΈ°ν™”λ₯Ό νŽΈλ¦¬ν•˜κ²Œ ν•˜κΈ° μœ„ν•¨μ΄ λͺ©μ μ΄λ‹€. λͺ¨λ“  속성을 μ΄ˆκΈ°ν™”ν•  ν•„μš”κ°€ μ—†λ‹€.

지정 μ΄ˆκΈ°ν™” λ©”μ„œλ“œλ₯Ό μ˜€λ²„λ‘œλ”©ν•  수 μžˆμœΌλ‚˜ 편의 μƒμ„±μžλ‘œ λ§Œλ“œλŠ” 것이 개발자의 μ‹€μˆ˜λ₯Ό 쀄일 수 μžˆλŠ” 방법이닀.

λ‹€λ§Œ, 편의 μƒμ„±μžλŠ” μ§€μ •μƒμ„±μžμ—κ²Œ μ˜μ‘΄ν•˜κΈ° λ•Œλ¬Έμ— 편의 μƒμ„±μž λ‚΄λΆ€μ—λŠ”

λ°˜λ“œμ‹œ 자기 λ‹¨κ³„μ˜ μ§€μ •μƒμ„±μžλ₯Ό ν˜ΈμΆœν•˜λŠ” μ½”λ“œκ°€ μ‘΄μž¬ν•΄μ•Ό ν•œλ‹€. μ΄λ•Œ μ§€μ •μƒμ„±μžλ₯Ό 이미 ν˜ΈμΆœν•˜λŠ” λ‹€λ₯Έ 편의 μƒμ„±μžλ₯Ό ν˜ΈμΆœν•΄λ„ κ°€λŠ₯ν•˜λ‹€.

λ‹€λ₯Έ λͺ©μ μ€ 상속을 ν•  κ²½μš°μ— μ„œλΈŒν΄λž˜μŠ€μ—μ„œ overrideλ₯Ό ν•˜μ§€ λͺ»ν•˜λŠ” λͺ©μ μ΄ μžˆλ‹€.(원칙)

../_images/initializerDelegation01_2x.png

class Bird {
    var name: String
    var age: Int
    
    init(name: String, age: Int) {
        self.name = name
        self.age = age
    }
    
    convenience init() {
        self.init(name: "μƒˆ", age: 1)
    }
}

let aBird = Bird(name: "μƒˆ", age: 1)
let bBird = Bird()

// λ™μΌν•œ 결과이닀.

상속과 μƒμ„±μž

지정 μƒμ„±μžμ˜ 상속

μƒμ„±μžλŠ” 기본적으둜 μƒμ†λ˜μ§€ μ•Šκ³  μž¬μ •μ˜κ°€ 원칙이닀.

class Vehicle {
    var numberOfWheels = 0
    var description: String {
        return "\(numberOfWheels) wheel(s)"
    }
}

let vehicle = Vehicle()
print("Vehicle: \(vehicle.description)")
// Vehicle: 0 wheel(s)

class Bicycle: Vehicle {
    override init() {
        super.init() 
        numberOfWheels = 2
    }
}

class Hoverboard: Vehicle {
    var color: String
    init(color: String) {
        self.color = color
        // super.init() implicitly called here
    }
    override var description: String {
        return "\(super.description) in a beautiful \(color)"
    }
}

let hoverboard = Hoverboard(color: "silver")
print("Hoverboard: \(hoverboard.description)")
// Hoverboard: 0 wheel(s) in a beautiful silver

편의 μƒμ„±μžμ˜ 상속

편의 μƒμ„±μžλŠ” μž¬μ •μ˜κ°€ λΆˆκ°€ν•œ 것이 원칙이닀.

μ°Έκ³ 

https://zeddios.tistory.com/141

https://docs.swift.org/swift-book/LanguageGuide/Initialization.html