다른 클래스로부터 상속받은 클래스는 subclass
라고 하고, 그 다른 클래스는 superclass
라고 부른다.
superclass
의 메서드, 프로퍼티 등을 subclass
에서 재정의하는 것을 말한다. 오버라이딩할 때는 메서드 등의 이름 앞에 override
키워드를 붙여준다.
오버라이딩된 메서드의 이름이 someMethod()
일 때, superclass
버전의 someMethod()
를 호출하려면 아래와 같이 써주면 된다.
super.someMethod()
viewController
의 view
가 메모리에 로드된 후 호출된다.
공식문서에 따르면 일반적으로 nib
파일로부터 로드된 view
에 대해 추가적인 초기화를 할 때 이 메서드를 오버라이딩한다.
UI
를 저장하는 데 쓰이는 리소스 파일의 타입을 말한다.
사실 오버라이딩된 viewDidLoad
는 그 내부에서 super.viewDidLoad()
를 호출하지 않아도 문제가 되지 않는다. viewDidLoad
메서드 공식 문서에서도 super.viewDidLoad
를 반드시 호출하라고 하는 부분은 없으며, 컴파일 할 때도 super.viewDidLoad
를 호출하지 않았다고 에러가 나지 않는다. 앱 실행도 문제 없이 잘 된다.
그럼에도 불구하고 super.viewDidLoad
를 호출하는 이유는 무엇일까? 이 물음에 대해 스택오버플로우에 누군가 작성한 답변이 있는데 내용은 아래와 같다.
- super.viewDidLoad()를 호출하는 것은 무엇보다도 좋은 습관이라고 생각합니다.
- iOS에서 일반적인 것은 슈퍼클래스가 해야 할 설정 (속성 초기화, 배치 등)을 완료한 후 모든 하위 클래스 설정을 수행하는 것입니다. 변경을 시작하기 전에 슈퍼클래스가 모든 설정을 처리할 수 있는 기회를 주지 않으면 이상한 버그와 동작이 발생할 수 있습니다.
- 우리는 클래스 초기화와 평행선을 그릴 수 있습니다. "지정된 이니셜라이저는 상속된 속성에 값을 할당하기 전에 슈퍼클래스 이니셜라이저까지 위임해야 합니다." 우리는 모든 슈퍼클래스 속성에 값이 있는지 확인하고 하위 클래스에서 상속을 통해 안전하게 사용할 수 있다는 사실을 기반으로 이 작업을 수행합니다.
- 경험 법칙:
- 초기화/설정할 때 상위 클래스의 구현을 먼저 실행하십시오.
- 해체/정리할 때 상위 클래스의 구현을 마지막에 실행하십시오.
- viewDidLoad()가 일종의 초기화라고 가정하면 수퍼클래스에서 올바르게 설정하기 위해 먼저 super.viewDidLoad()를 호출해야 합니다.- UIViewController 기본 클래스에서 viewDidLoad() 구현을 확인하면 비어 있음을 알 수 있습니다. 따라서 자식 클래스에서 super.viewDidLoad()를 호출하는 유일한 이유는 좋은 코딩 스타일 때문일 것입니다 :-) 따라해 봅시다!
Inheritance - The Swift Programming Language (Swift 5.7)