
Swift에서 init 키워드는 클래스, 구조체, 또는 열거형의 초기화 메서드(Initializer)를 정의하는 데 사용됩니다. 초기화 메서드는 인스턴스를 생성할 때 호출되며, 모든 저장 속성의 초기 값을 설정하고 초기화 과정에서 필요한 작업을 수행합니다.
아래에서 init 키워드에 대해 자세히 설명하겠습니다.
init은 초기화 메서드를 정의하는 키워드입니다.return 키워드를 사용하지 않습니다.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)
print(person.name) // 출력: John
print(person.age) // 출력: 30
init(name: String, age: Int)는 Person 구조체의 초기화 메서드입니다.self.name과 self.age를 사용하여 저장 속성을 초기화합니다.클래스에서는 초기화 메서드를 정의할 때, 상속과 관련된 추가적인 규칙이 있습니다.
class Animal {
var species: String
init(species: String) {
self.species = species
}
}
let animal = Animal(species: "Dog")
print(animal.species) // 출력: Dog
class Animal {
var species: String
init(species: String) {
self.species = species
}
}
class Dog: Animal {
var breed: String
init(species: String, breed: String) {
self.breed = breed
super.init(species: species) // 부모 클래스의 초기화 메서드 호출
}
}
let dog = Dog(species: "Dog", breed: "Golden Retriever")
print(dog.species) // 출력: Dog
print(dog.breed) // 출력: Golden Retriever
super.init(species: species)를 사용하여 부모 클래스의 초기화 메서드를 호출합니다.구조체는 모든 저장 속성을 초기화하는 멤버 와이즈 초기화를 자동으로 제공합니다.
struct Rectangle {
var width: Double
var height: Double
}
let rect = Rectangle(width: 10.0, height: 5.0)
print(rect.width) // 출력: 10.0
print(rect.height) // 출력: 5.0
클래스에서는 편의 초기화 메서드를 정의할 수 있습니다. 이는 기본 초기화 메서드를 보완하여 간단한 초기화를 제공합니다.
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 person1 = Person(name: "John", age: 30)
let person2 = Person(name: "Jane")
print(person1.age) // 출력: 30
print(person2.age) // 출력: 0
convenience 키워드를 사용하여 편의 초기화 메서드를 정의합니다.클래스에서 모든 저장 속성을 초기화하지 않으면 필수 초기화 메서드(required initializer)를 정의해야 할 수 있습니다.
class Vehicle {
var model: String
required init(model: String) {
self.model = model
}
}
class Car: Vehicle {
var color: String
init(model: String, color: String) {
self.color = color
super.init(model: model)
}
required init(model: String) {
self.color = "Unknown"
super.init(model: model)
}
}
required 키워드는 해당 초기화 메서드를 모든 하위 클래스에서 구현하도록 강제합니다.required 초기화 메서드를 반드시 재정의해야 합니다.초기화 중 특정 조건을 만족하지 못하면 초기화가 실패할 수 있습니다. 이 경우 failable initializer를 사용합니다.
struct Student {
var name: String
var age: Int
init?(name: String, age: Int) {
if age < 0 {
return nil // 초기화 실패
}
self.name = name
self.age = age
}
}
let student1 = Student(name: "Alice", age: 20) // 성공
let student2 = Student(name: "Bob", age: -5) // 실패
print(student1?.name) // 출력: Optional("Alice")
print(student2?.name) // 출력: nil
init?를 사용하여 실패 가능한 초기화 메서드를 정의합니다.nil을 반환합니다.init은 저장 속성을 초기화하고 인스턴스를 생성할 때 사용됩니다.convenience 초기화, required 초기화, 그리고 실패 가능한 초기화(init?)를 통해 다양한 초기화 방식을 구현할 수 있습니다.
열심히 하는 모습 너무 보기 좋아요 ( *´◡`)੭