Failable Initialization 만약 클래스, 구조체, enum에서 실패할만한 조건이 들어올 때 초기화를 하지 않도록 하려면 어떻게 해야할까? init? 키워드를 사용해서 init() 메소드를 작성하면 된다. init?() 메소드를 보면 현재 순위를 입력 받아와 갱신하는 메소드이다. 1보다 작은 순위는 없으므로 순위 값이 0이하일경우 nil을 반환하는 Failable init()을 작성했다. 초기화에 필요한 조건을 만족하지 않는 경우 nil을 리턴하면 된다. ✅ 위와 같이 같은 인자와 같은 이림을 가진 생성자는 공존할 수 없다. (non-failable / failable 둘 다 포함) 다른 생성자와 마찬가지로 슈퍼 클래스의 Failable init()도 하위 클래스에서 오버라이딩이 가능하다...
클래스에서의 생성자는 값 타입에서의 생성자와 조금 다른데, Memberwise init을 제공하는 값 타입과 달리 클래스는 Memberwise init을 지원하지 않는다. 따라서 모든 클래스들의 프로퍼티는 초기화 과정에서 반드시 초기 값이 할당되어야 한다. ✅ 상속 받은 클래스가 있는 경우 상위 클래스들의 프로퍼티도 모두 초기 값이 할당되어야 한다. 지정 생성자 - Designated Initializer - 클래스에 지정된 모든 프로퍼티는 초기화 해야함. - 클래스 타입은 최소 하나 이상의 지정 생성자가 필요함. init (param) { // statements } 편의 생성자 - Convenience Initializer - 클래스 타입에만 지원하는 보조적인 생성자이다. - 옵셔널 타입이다. - 편..
Default Initializer 스위프트에서는 init() 메소드를 사용하지 않아도 기본적으로 제공하는 Default Initializer가 있다. 기본 생성자를 사용하기 위한 조건으로는 아래와 같다. 1. 모든 프로퍼티가 초기 값을 가져야 한다. 2. 부모 클래스가 없어야 한다. 위의 예제는 기본 생성자를 사용한 예제이다. name과 age는 peopleClass 내부에서 설정한 Default Value로, 옵셔널 타입으로 지정 된 nationality는 nil이 반환되어 출력된다. ✅ Default init을 사용하기 위해서는 주의할 점이 있는데, 각 프로퍼티에 초기값을 설정해야한다. 초기값을 설정하지 않으면 아래와 같이 에러가 발생한다. Memberwise Initializer 구조체는 클래스와..
생성자(Initialization)는 클래스, 구조체, 열거형에서 인스턴스를 준비하기 위한 과정이다. 생성자 초기화 - init() 생성자 초기화는 인스턴스의 저장 프로퍼티의 값을 초기화 하는 것을 의미한다. ✅ 클래스나 구조체의 저장 프로퍼티는 무조건 생성될 때 함께 초기화 되어야 한다. init() { // perform some init here } 생성자는 특정타입의 새로운 인스턴스가 생성될 때 호출된다. 가장 간단한 모양은 생성자가 매개변수가 없는 인스턴스 메서드 같이 선언된 것으로 init 키워드를 사용하여 정의한다. 위의 코드는 가장 기본적인 어떤 인자도 받지 않는 생성자이다. someClass라는 클래스의 init() 내부에서 name, age, nationality를 초기화 할 수 있다...