인스턴스 초기화 시점과 방식을 책임지는 생성자(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 복원 로직 이곳에 작성 |
'iOS' 카테고리의 다른 글
[iOS] MVVM 패턴에서 데이터 로딩 책임 분리 (0) | 2025.06.18 |
---|---|
[아키텍처] Clean Architecture + MVVM (0) | 2025.06.13 |
[Swift] SOLID 원칙 iOS에 적용해보기 (1) | 2025.06.10 |
[iOS] 리팩토링이라 쓰고 파일분리노가다라고 읽기 (0) | 2025.05.22 |
[iOS] SnapKit과 AutoLayout (0) | 2025.05.20 |