티스토리 뷰

swift에는 그냥 init ( Designated init )과 convenience init 이렇게 두가지가 존재합니다.


이 두가지의 차이점에 대해서 알아보려고 합니다.


일단 그냥 init은 말그대로 생성자입니다.


그래서 이 생성자에서는 클래스의 모든 property가 초기화 될 수 있도록 하여야 합니다.


1
2
3
4
5
6
7
8
9
10
11
class Person {
 
    var name: String
    var age: Int
 
    init(name: String, age: Int) {
        self.name = name
        self.age = age
    }
}
 
cs


이렇게 객체를 생성한다고 할 경우에, 모든 property가 init을 할 경우에 초기화가 되어 있습니다.


하나라도 빠지게 되면 초기화가 되지 않겠죠?

그렇게 되면 에러가 발생하게 되고 초기화를 하라고 합니다.


Return from initializer without initializing all stored properties


그럼 기본 init 말고 convenience init은 이렇게 다 하지 않아도 됩니다.

대신... 기본 init에 위임을 하여 주면 됩니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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)
    }
}
 
cs


이렇게 되면 init을 아예 다른것으로 만들면서 기본 생성자를 호출만 하여 주면 됩니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Person {
 
    var name: String
    var age: Int
 
    init(name: String, age: Int) {
        self.name = name
        self.age = age
    }
 
    convenience init(first: String, name: String, age: Int) {
        self.init(name: "\(first) \(name)", age: age)
    }
}
 
cs


이런저런것들 extension 만들때 저는 많이 이용합니다.



댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함