클래스, 구조체, 또는 열거형의 새로운 인스턴스를 생성할 때 사용되는 특별한 메서드다.
초기화 과정에서 해당 타입의 모든 속성을 설정하고, 초기 상태를 준비해주는 역할을 한다.
보통 init키워드를 사용해서 정의해
struct Person {
var name: String
var age: Int
// Custom Initializer
init(name: String, age: Int) {
self.name = name
self.age = age
}
}
let person = Person(name: "John", age: 30)
convenience 키워드로 정리required키워드를 사용struct Car {
var brand = "Hyundai"
var model = "Sonata"
}
let car = Car()
print(car.brand) // "Hyundai"
struct Point {
var x: Int
var y: Int
}
let point = Point(x: 10, y: 20)
print(point.x) // 10
class Animal {
var name: String
required init(name: String) {
self.name = name
}
}
class Dog: Animal {
required init(name: String) {
super.init(name: name)
}
}
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: "Alice")
print(person.age) // 0
// 속성이 Optional 이라면 초기값 없이 선언할 수 있다.
struct User {
var username: String
var age: Int?
}
let user = User(username: "john_doe")
print(user.age) // nil
//지정 이니셜라이저와 편의 이니셜라이저가 구분됩니다
// 서브클래스는 반드시 부모 클래스의 지정 이니셜라이저를 호출해야 된다.
class Parent {
var name: String
init(name: String){
self.name = name
}
}
class Child: Parent {
var age: Int
init(name: String, age: Int){
self.age = age
super.init(name: name) // 부모 이니셜라이저 호출
}
}