규칙 : 지정생성자를 구현하면, 부모클래스의 필수생성자 또한 구현해줘야한다
import UIKit
class CustomCell : UITableViewCell{
//customCell을 만들때 작성하는 형식으로, 초기화 과정을 다루고 있음
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
//셀의 스타일과, 재사용 식별자를 매개변수로 받고 있음.
super.init(style: style, reuseIdentifier: reuseIdentifier)
}
required init?(coder: NSCoder) {
super.init(coder: coder)
}
}
CustomCell을 만들려 setting을 시작했다.
required init 은 어떤 역할을 하는지 궁금해졌다.
먼저, required init이 없는 상태에서 build를 해보면.
필수 항목이라는 에러와 함께 다음 코드를 제안해준다.
Error
'required' initializer 'init(coder:)' must be provided by subclass of 'UITableViewCell'
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}

위 코드는 스토리보드나 XIB에서 셀을 초기화 하지않도록 강제하는 코드이며,
셀의 인스턴스를 생성할때, Inteface Builder를 사용하지 않을 것이라고 확신하는 경우
즉, 코드로 UI를 작업한 경우에 사용이 가능하다.
required init?(coder: NSCoder) {
super.init(coder: coder)
}
2번 코드는 반대로 super.init를 호출하여, 스토리보드에서 셀을 초기화 할 수 있도록하는 코드이다.
슈퍼클래스의 요구사항을 적절하게 충족시키려면 2번 코드를 호출하는게 적합하다.