Swift에서 생성자는 객체를 초기화하는 역할을 합니다. 생성자는 객체의 속성 값을 설정하고 초기화하는 데 사용됩니다. 생성자에 대해 심화적으로 알아보겠습니다.
기본 생성자
Swift에서는 클래스, 구조체, 열거형이 기본적으로 생성자를 제공합니다. 구조체와 클래스는 자동으로 모든 속성에 기본값이 있는 경우 기본 생성자를 제공합니다.
struct Person {
var name: String
var age: Int
}
let person = Person(name: "John", age: 30)
사용자 정의 생성자
사용자 정의 생성자를 통해 객체 초기화를 사용자 지정할 수 있습니다.
struct Person {
var name: String
var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
}
let person = Person(name: "John", age: 30)
편의 생성자 (Convenience Initializer)
편의 생성자는 클래스에서만 사용할 수 있으며, 보조 생성자로서 주 생성자(primary initializer)를 호출하여 초기화를 단순화할 수 있습니다.
class Person {
var name: String
var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
convenience init(name: String) {
self.init(name: name, age: 0)
}
}
let person = Person(name: "John")
필수 생성자 (Required Initializer)
필수 생성자는 하위 클래스에서 반드시 구현해야 하는 생성자입니다. required
키워드를 사용하여 정의합니다.
class Person {
var name: String
var age: Int
required init(name: String, age: Int) {
self.name = name
self.age = age
}
}
class Employee: Person {
var jobTitle: String
required init(name: String, age: Int) {
self.jobTitle = "Unknown"
super.init(name: name, age: age)
}
}
let employee = Employee(name: "John", age: 30)
Failable Initializer (실패 가능한 생성자)
생성자가 실패할 가능성이 있는 경우, init?
또는 init!
로 실패 가능한 생성자를 정의할 수 있습니다. 실패 시 nil
을 반환합니다.
struct Person {
var name: String
var age: Int
init?(name: String, age: Int) {
if age < 0 {
return nil
}
self.name = name
self.age = age
}
}
if let person = Person(name: "John", age: -1) {
print("Person created: \(person.name)")
} else {
print("Failed to create Person")
}
디이니셜라이저 (Deinitializer)
디이니셜라이저는 클래스 인스턴스가 소멸되기 전에 호출되는 메서드입니다. deinit
키워드를 사용하여 정의합니다.
class Person {
var name: String
init(name: String) {
self.name = name
}
deinit {
print("\(name) is being deinitialized")
}
}
var person: Person? = Person(name: "John")
person = nil // "John is being deinitialized" 출력