[swift] Swift 초기화 메서드 호출 순서

Swift에서는 객체의 초기화 과정을 보장하기 위해 designated initializer와 convenience initializer라는 두 가지 종류의 초기화 메서드를 지원합니다.

Designated initializer는 클래스의 기본 초기화 메서드로, 모든 프로퍼티의 초기값을 설정해야 합니다. 해당 초기화 메서드는 반드시 호출되어야 하며, subclass에서 재정의될 수 있습니다.

Convenience initializer는 조금 더 편리한 방법으로 객체를 초기화할 수 있는 메서드입니다. 이 메서드는 기존의 designated initializer를 호출하여 초기화 과정을 완료할 수 있으며, subclass에서도 재정의될 수 있습니다.

객체의 초기화는 다음과 같은 순서로 진행됩니다.

  1. 인스턴스 변수 초기화: 객체의 메모리 공간이 할당되고, 프로퍼티들이 기본값으로 초기화됩니다.
  2. Designated initializer 호출: designated initializer가 호출됩니다. 이때, superclass의 designated initializer도 함께 호출됩니다.
  3. 프로퍼티 값 설정: designated initializer에서 프로퍼티 값을 설정합니다. 이때, 값의 유효성을 검사하기 위해 필요한 초기화 코드를 포함시킬 수 있습니다.
  4. Convenience initializer 호출: 필요한 경우, convenience initializer를 호출하여 객체의 추가적인 초기화를 수행합니다. 이때, designated initializer를 호출해야 하는 것에 유의해야 합니다.
  5. 초기화 완료: 모든 초기화 작업이 끝나면 객체의 초기화가 완료됩니다.

추가적으로, designated initializer는 반드시 호출되어야 하기 때문에 subclass에서 재정의할 때에는 superclass의 designated initializer를 호출해야 합니다. convenience initializer는 반드시 같은 클래스에 속한 다른 initializer를 호출해야 하며, 최종적으로 designated initializer를 호출해야 합니다.

이와 같은 초기화 메서드 호출 순서를 이해하면 Swift에서 객체의 초기화를 더욱 정확하고 안정적으로 수행할 수 있습니다.

참고: