필수생성자
- 부모클래스에서 생성자에 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 |