2단계 초기화 확실히 이해하기

권승용(Eric)·2024년 11월 8일

TIL

목록 보기
8/38

1단계 초기화

  • 자신 및 부모 클래스의 모든 프로퍼티 기본값 설정하기
class A {
  let a: Int
  
  init() {
    self.a = 3
  }
}

class B: A {
  let b: Int
  
  init() {
    self.b = 4 // <- 자기 자신의 프로퍼티 기본값 설정
    super.init() // <- 부모 지정 초기자 호출을 통해 기본 프로퍼티 설정
  }
}
  • 인스턴스는 초기화 과정에서 모든 프로퍼티에 기본값을 할당해야 함.
  • 1단계 초기화는 부모 클래스 및 그를 상속하는 자식 클래스가 각자의 기본 프로퍼티를 설정하는 과정.
  • 자식 클래스의 경우 자기 자신의 프로퍼티에 기본값을 먼저 지정하고, 부모 클래스의 지정 초기자를 호출해 부모 클래스 프로퍼티의 기본값을 지정해주어 인스턴스의 모든 프로퍼티에 기본값을 설정한다.

2단계 초기화

  • 1단계 초기화가 끝나고 난 이후, 초기값 커스텀 가능
class A {
  let a: Int
  
  init() {
    self.a = 3
  }
  
  func some() {}
}

class B: A {
  let b: Int
  
  init() {
    self.b = 4 // <- 자기 자신의 프로퍼티 기본값 설정
    super.init() // <- 부모 지정 초기자 호출을 통해 기본 프로퍼티 설정
    
    a = 6 // <- 모든 프로퍼티 초기화 완료 후 추가적인 값 변경 진행
    // self에 접근가능해지고, 인스턴스 메소드를 호출할 수 있음
  }
}
  • 모든 프로퍼티의 초기화가 끝났기 때문에 self 인스턴스에 접근 가능해지고 인스턴스 프로퍼티 수정 / 메소드 호출이 가능해짐
  • 2단계 초기화는 super.init()으로 인해 원하지 않는 값으로 초기화가 진행된 경우 수정할 수 있는 기회를 준다.
profile
ios 개발자에용

0개의 댓글