오늘은 강의를 듣던 도중 새로운 것을 알게되어서 작성하게 되었다.
새로 알게된 건 바로 실패 가능한 생성자(Failable Initalizers)이다. 실패 생성 가능자란 초기화 중 실패할 가능성이 있는 생성자를 말한다. 원래 기존 생성자는 컴파일 시점에 모든 프로퍼티가 초기화 되어야 하기 때문에 초기화를 실패하는 경우 컴파일 에러가 발생했다. 하지만 실패 가능 생성자는 초기화에 실패하더라도 에러가 발생하지 않고, nil 을 반환한다. 쉽게 말해 Optional 생성자 라고 보면 된다.
기존의 생성자를 살펴보면 아래와 같이 작성된다.
class Car {
let name: String
init(name: String) {
self.name = name
}
}
실패 가능 생성자는 init 뒤에 ? 가 붙어 생성하면 실패 가능 생성자가 완성된다.
class Car {
let name: String
init?(name: String) {
guard name.isEmpty == false else {
return nil
}
self.name = name
}
}
이 생성자는 name 으로 들어온 파라미터가 만약 빈값이라면 생성을 하지 못하고 nil 을 반환하는 생성자이다. 이런식으로 필요에 따라 nil 값을 반환하는 생성자를 만들어 값이 잘못들어오더라도 프로그램이 종료되지 않도록 해줄 수 있다.
아래는 사용 예제 코드이다.
class Car {
let name: String
init?(name: String) {
guard name.isEmpty == false else {
return nil
}
self.name = name
}
}
// 성공버전
if let validCar = Car(name: "BMW") {
print("자동차의 이름은 \(validCar.name)입니다.")
} else {
print("자동차가 생성되지 않았습니다.")
}
// 실패버전
if let validCar = Car(name: "") {
print("자동차의 이름은 \(validCar.name)입니다.")
} else {
print("자동차가 생성되지 않았습니다.")
}
// 실행 결과
// 자동차의 이름은 BMW입니다.
// 자동차가 생성되지 않았습니다.
코드를 살펴보면 성공버전에서 생성한 클래스는 name에 BMW 라는 값이 들어가 생성이 잘 되었지만 아래는 name 에 빈값이 들어가 생성이 되지 않는 모습을 확인할 수 있다.
'TIL(Today I Learned)' 카테고리의 다른 글
| 2024.06.10 Today I Learned (0) | 2024.06.10 |
|---|---|
| 2024.06.05 Today I Learned (0) | 2024.06.05 |
| 2024.05.31 Today I Learned (0) | 2024.05.31 |
| 2024.05.29 Today I Learned (0) | 2024.05.28 |
| 2024.05.27 Today I Learned (0) | 2024.05.27 |