iOS

override init vs required init 초기화 차이

양밀루 2025. 5. 21. 21:34

인스턴스 초기화 시점과 방식을 책임지는 생성자(Initializer)

 

✅ override init

  • 슈퍼클래스에서 “이렇게 초기화하세요”라고 지정해둔 지정 생성자(Designated Initializer)재정의(override)
  • 코드로 뷰나 셀을 만들 때, 스토리보드·XIB가 아니라 init(frame:)(컬렉션뷰 셀) 또는 init(style:reuseIdentifier:)(테이블뷰 셀) 로 호출
class MyCell: UICollectionViewCell {
    override init(frame: CGRect) {
        super.init(frame: frame)   // 슈퍼 초기화 필수 호출
        setupUI()                  // 이후 커스텀 UI 설정
    }
    // … required init?(coder:) 생략 …
}

 

✅ required init

  • Interface Builder(스토리보드/XIB)에서 아카이브된 뷰를 복원할 때 호출되는 생성자
  • 스토리보드나 XIB에 연결된 뷰·셀이라면, 런타임에 이 메서드를 거쳐 인스턴스가 만들어짐
  • 슈퍼클래스가 이 생성자를 required로 선언했기 때문에, 모든 서브클래스가 반드시 구현해야 함
required init?(coder: NSCoder) {
    super.init(coder: coder)   // 슈퍼 초기화 꼭 호출
    setupUI()                   // 스토리보드 기반에서도 UI 설정
}
// 코드 전용이라면 fatalError로 막기도 함

 

 

 정리

  override init required init
호출 시점 코드로 인스턴스화할때((init(frame:) 등) 스토리보드/XIB에서 복원할 때
코드로 구현 ⭕️ 필수 ❌ fatalError 처리
스토리보드/XIB 사용 ❌ 흔치 않음 ⭕️ UI 복원 로직 이곳에 작성