iOS/Swift

인스턴스 생성 및 소멸 4편 (실패 가능한 이니셜라이저)

밤새는 탐험가89 2024. 1. 31. 11:18

 

실패 가능한 이니셜라이저 

 

이니셜라이저를 정의할 때 

전달인자가 잘못된 값이거나 

적절하지 못한 값인거나 등의 이유로

인스턴스 초기화에 실패할 수 있음 

 

이에 대응하고자 실패 가능성을 내포한 이니셜라이저 (= 실패 가능한 이니셜라이저)

 

실패 가능한 이니셜라이저는 클래스, 구조체, 열거형 등에 모두 정의 가능 

 

 

실패했을 경우에는 "nil"을 반환해주므로 

반환 타입이 옵셔널로 지정 (= "init?" 키워드 사용)

 

 

실패 가능한 이니셜라이저 

class Contact {
    var name: String 

    init?(name: String) {
        if name.isEmpty {
            return nil 
        }
        self.name = name 
    }
}

let jerry: Contact? = Contact(name: "")

if let jerry: Contact = jerry {
    print(jerry.name)
} else {
    print("no initialized")
}

// no initialized

 

 

Contact 클래스는 name 이라는 저장 프로퍼티에 값을 잘못 입력하면

실패 가능한 이니셜라이저를 통해 초기화하지 않도록 함 

 

 

실패 가능한 이니셜라이저는 열거형에서 유용함 

특정 case에 맞지 않는 값이 입력될 경우

생성에 실패하도록 함 

 

enum Season: String{ 
    case spring = "Spring"
    case summer = "Summer"
    case fall = "Fall"
    case winter = "Winter"

    init? (month: Int) {
        switch month {
            case 3,4,5: 
                self = .spring
            case 6,7,8: 
                self = .summer
            case 9,10,11:
                self = .fall
            case 12,1,2: 
                self = .winter
            default:
                return nil 
        }
    }
}

 

 

 

var jerry: Season? = Season(month: 10)
print(jerry)    // fall


var mike: Season? = Season(month: 13)
print(mike)    // nil


jerry = Season(rawValue: "Spring")
print(jerry)   // spring 


mike = Season(rawValue: "spring")
print(mike)   // nil