[swift] Swift 초기화 메서드에서의 속성 초기화 순서

Swift에서 클래스나 구조체의 초기화는 초기화 메서드(init)를 통해 이루어집니다. 초기화 메서드에서는 속성들의 초기값을 설정하고 객체를 사용 가능한 상태로 만듭니다.

이때, 속성 초기화의 순서는 중요한 요소입니다. Swift에서는 속성 초기화 순서를 다음과 같이 정의합니다:

  1. 클래스의 속성을 선언 순서에 맞게 초기화합니다.
  2. 부모 클래스의 초기화 메서드를 호출합니다.
  3. 부모 클래스의 초기화 메서드가 호출되었으면, 부모 클래스의 속성을 초기화합니다.
  4. 자식 클래스에서 재정의한 초기화 메서드에서 어떤 추가적인 초기화 작업이 필요하다면 이를 수행합니다.

다음은 이러한 초기화 순서를 보여주는 Swift 코드의 예시입니다:

class Parent {
    var name: String
    
    init() {
        name = "Parent"
    }
}

class Child: Parent {
    var age: Int
    
    override init() {
        age = 10
        super.init()
        // 여기에서 추가적인 초기화 작업 수행 가능
    }
}

let child = Child()
print(child.name) // "Parent"
print(child.age) // 10

위의 코드에서 Child 클래스는 Parent 클래스를 상속받고 있습니다. Child 클래스에서는 age라는 새로운 속성을 추가로 정의하고 초기화합니다. 초기화 메서드에서는 age 속성을 초기화한 후 super.init()을 호출하여 부모 클래스의 초기화 메서드를 호출합니다.

따라서 위 예시에서 Child의 객체를 생성하면 Parent 클래스의 속성인 name이 초기화되고, 이어서 Child 클래스의 속성인 age가 초기화됩니다.

위의 예시는 초기화 순서의 기본적인 동작을 보여주는 것이며, 실제로는 더 복잡한 초기화 로직이 존재할 수 있습니다. 개발할 때는 이러한 초기화 순서를 주의깊게 고려하여 적절한 초기화 작업을 수행하도록 해야 합니다.

참고 자료: