Swift
에서 클래스를 작업할 때, 객체를 생성하고 초기화하는 과정은 매우 중요하다. Swift
는 이니셜라이저를 사용하여 객체를 안전하고 효율적으로 초기화할 수 있는 기능이 있다! 그중에 convenience init
에 대해 알아보자.
convenience init은 클래스 초기화를 더 간편하게 해주는 특별한 종류의 이니셜라이저이다. 기본 이니셜라이저(designated initializer
)를 보조하는 역할을 한다.
Swift의 convenience init
객체를 생성하고 초기화하는 과정은 매우 중요합니다. 우리는 이니셜라이저를 사용하여 객체를 안전하고 효율적으로 초기화할 수 있다.
1. 이니셜라이저(Initializer)란?
클래스의 인스턴스가 생성될 때, 그 인스턴스의 모든 프로퍼티에 유효한 초기값을 할당해야 한다. 이 과정을 초기화라고 하며, 이니셜라이저는 이러한 초기화 과정을 담당하는 특별한 메서드이다.
2. Designated Initializer와 Convenience Initializer
Swift에는 두 종류의 이니셜라이저가 있다. 바로 Designated Initializer 와 Convenience Initializer.
2.1. Designated Initializer
클래스의 모든 프로퍼티를 초기화하고, 필요한 경우 부모 클래스의 이니셜라이저를 호출한다.
모든 클래스는 적어도 하나 이상의 Designated Initializer 를 가져야 한다.
2.2. Convenience Initializer
클래스 내에서 다른 이니셜라이저를 호출하여 객체를 초기화한다.
코드 중복을 줄이고, 객체 생성을 더 간편하게 만들기 위해 사용한다고 한다.
3. convenience init 사용 예시
아래는 Person
클래스에서의 convenience init
의 사용 예시이다.
class Person {
var name: String
var age: Int
// Designated Initializer
init(name: String, age: Int) {
self.name = name
self.age = age
}
// Convenience Initializer
convenience init(name: String) {
self.init(name: name, age: 0)
}
}
let john = Person(name: "Swift", age: 30) // Designated Initializer 사용
let unknown = Person(name: "Unknown") // Convenience Initializer 사용
위 예시에서 Person
클래스는 이름과 나이를 프로퍼티로 가지고 있다.. init(name:age:)
는 Designated Initializer로, 이름과 나이를 모두 초기화한다. 반면에 convenience init(name:)
는 Convenience Initializer로, 이름만을 매개변수로 받고 나이는 기본값 0으로 설정한다.
4. convenience init의 규칙
convenience init
을 사용할 때 몇 가지 규칙이 있다.
Convenience Initializer는 같은 클래스의 다른 이니셜라이저를 반드시 호출해야 한다.
Convenience Initializer는 결국 Designated Initializer를 간접적으로라도 호출해야 한다.
Designated Initializer는 부모 클래스의 이니셜라이저를 호출해야 할 수도 있지만, Convenience Initializer는 그럴 필요가 없다.
5. 결론
convenience init
은 객체의 초기화 과정을 더 유연하게 만들어 준다. 코드의 중복을 줄이고, 필요한 매개변수만으로 객체를 쉽게 생성할 수 있도록 도와준다.
'→ Swift Study' 카테고리의 다른 글
[Swift] 약한참조 (weak self) Swift 로 실습해보기 (0) | 2024.01.21 |
---|---|
[Swift] GCD 알아보기 4 - 동시성 관련 문제 (0) | 2024.01.11 |
[Swift] GCD 알아보기 3 - DispatchGroup (0) | 2024.01.11 |
[Swift] GCD 알아보기 2 - GCD 종류 (0) | 2024.01.09 |
[Swift] GCD 알아보기 1 - 동기, 비동기, 직렬, 동시, 병렬 (1) | 2024.01.08 |