필수생성자
- 부모클래스에서 생성자에 required를 붙이면 자식클래스에서 반드시 해당 생성자를 구현해야한다
- 클래스에서만 사용가능
class AClass { // 부모클래스
required init() { // 필수생성자
print("필수구현")
}
}
class BClass: AClass {
required init() { // 자식클래스에서 반드시 구현(재정의)
print("필수구현생성자재정의")
super.init()
}
}
let ac = AClass()
let bc = BClass()
/*
콘솔:
필수구현
필수구현생성자재정의
필수구현
*/
실패가능생성자
- 인스턴스 실패 가능성을 가진 생성자
- 생성 실패시 nil 리턴
- 생성자에 ?를 붙여서 init?(...)으로 정의
- 오버로딩이 불가능 (해당이름을 가진 유일한 생성자여야함)
- 인스턴스의 타입은 옵셔널임
class AClass { // 부모클래스
var str: String
init?(str: String) {
if str.isEmpty { // str이 빈값이면
return nil // return nil
} else { // 빈값이 아니면
self.str = str // 초기화
}
}
}
// nil 가능성이 있기때문에 옵셔널타입이다
let ac: AClass? = AClass(str: "") // nil
let ac2: AClass? = AClass(str: "Hello")
ac2?.str // "Hello"
소멸자
- 인스턴스가 메모리에서 제거되기 직전 자동으로 호출되는 메서드부분
- 클래스에는 최대 한개의 소멸자가 존재
- 클래스에만 존재
- 파라미터따윈 없다...
class AClass { // 부모클래스
var str: String
init?(str: String) {
if str.isEmpty {
return nil
} else {
self.str = str
}
}
deinit {
print("객체의 소멸")
}
}
var ac2: AClass? = AClass(str: "Hello")
ac2 = nil
/*
콘솔:
객체의 소멸
*/
'Swift > 문법' 카테고리의 다른 글
[Swift] 확장 (extension) (0) | 2022.04.10 |
---|---|
[Swift] 타입캐스팅 (is, as?, as! 연산자) (0) | 2022.04.09 |
[Swift] 초기화(Initialization)와 생성자(Initializer) (4/5) 생성자 재정의 (0) | 2022.04.09 |
[Swift] 초기화(Initialization)와 생성자(Initializer) (3/5) 상속과 초기화 (0) | 2022.04.09 |
[Swift] 초기화(Initialization)와 생성자(Initializer) (2/5) 지정생성자와 편의생성자 (0) | 2022.04.09 |