
Swift에서 클래스, 구조체, 또는 열거형을 사용할 때, 그것들의 인스턴스를 올바르게 초기화하는 것은 매우 중요합니다. 이 포스트에서는 Swift의 다양한 이니셜라이저와 그 사용법에 대해 알아보겠습니다.
💡 초기화 (
initializer)는 사용할 클래스나, 구조체, 또는 열거체 인스턴스를 준비하는 과정 입니다.
이 과정은 인스턴스의 각 저장 속성마다 초기값을 설정하는것, 그리고 새 인스턴스를 사용하기 전에 필수인 다른 어떤 설정이나 초기화를 하는 것 입니다
Swift는 여러 종류의 이니셜라이저를 제공합니다. 각각의 특징과 사용 시점을 알아봅시다.
designated initializer
클래스의 주요 이니셜라이저로, 모든 속성을 완전히 초기화하고 상위 클래스의 이니셜라이저를 호출합니다.
class MyClass {
var property: DataType
init(property: DataType) {
self.property = property
}
}
convenience initializer
지원용 이니셜라이저로, 동일한 클래스의 designated initializer를 보조하는 역할을 합니다. 일부 매개변수에 기본값을 설정하여 사용할 수 있습니다.
class MyClass {
var property: DataType
convenience init() {
self.init(property: DefaultValue)
}
}
failable initializer
특정 조건에서 초기화가 실패할 수 있는 이니셜라이저입니다. 실패 시 nil을 반환합니다.
struct Temperature {
var celsius: Int
init?(celsius: Int) {
if celsius < -273 {
return nil
}
self.celsius = celsius
}
}
deinitializer
클래스 인스턴스가 메모리에서 해제되기 바로 전에 호출되는 메소드입니다. 주로 자원 해제나 정리 작업에 사용됩니다.
class FileHandler {
var filePath: String
init(filePath: String) {
self.filePath = filePath
// 파일 열기 또는 생성 로직
}
deinit {
// 파일 닫기 로직
}
}
프로퍼티 기본값과 이니셜라이저를 사용하여 초기값을 주입하는 것은 서로 다른 상황에 적합합니다.
프로퍼티 기본값: 모든 인스턴스에 동일한 초기값을 자동으로 설정합니다. 간단하고 명확한 경우에 적합합니다.
이니셜라이저: 초기 생성 시 다양한 초기값을 제공할 수 있어 유연합니다. 상황에 따라 다른 초기값이 필요한 경우에 적합합니다.
이니셜라이저는 Swift에서 객체 지향 프로그래밍의 핵심 요소 중 하나입니다. 올바른 이니셜라이저를 선택하고 사용함으로써, 안정적이고 유연한 코드를 작성할 수 있습니다.