(Macbook Air M1 8-256 Monterey 12.5.1 Xcode 13.1)
Why?
새로운 UIViewController file을 생성할 때 보면
언제나 override func viewDidLoad() 하단에
super 키워드를 단 super.viewDidLoad()가 생성됩니다.
저번 포스팅에서 View생명주기를 공부하면서 viewDidLoad()가 무엇인지 대략적으로 알 수 있었는데요.
그래서 그런지 하위에 항상 들어가있는 super 키워드가 항상 궁금했었습니다.
"반드시 넣어줘야하는 항목인건가?" 하고요.
그래서 꼭 호출해야 할까?
stackoverflow에 실제로 이와 동일한 질문이 올라온적이 있더라고요. (관련링크)
정확히 저와 같은 궁금증의 질문이였는데요.
해당 사이트의 답변을 참고해도 저는 잘 이해가 가지는 않아서...
(결론적으로 안 쓰면 실행이 안되니 그냥 써라 라는 내용)
혹여나 제 글을 읽으시고 이해가 안되신다면 관련링크로 들어가셔서 확인하시는게 도움이 되실 것 같습니다.
우선 공식 문서에 나와있는 viewDidLoad() Discussion을 살펴보겠습니다.
개인적인 해석은 다음과 같습니다.(해석이 잘못되었을 수 있습니다.)
이 method를 override하여 view 속성 내부의 설정을 즉시 따르도록 작업을 수행할 수 있습니다.
일반적으로 override는 viewcontroller의 view의 내용에 대한 초기화와 일회성 인스턴스화를 수행합니다.
만약 이 메서드를 override할 경우, superclass가 이 method를 override한다면,
어느 시점 구현 내부의 super에서 이 method를 호출합니다.
nib 파일에서 시작된 view controller인 경우,
이 method는 view 속성이 설정된 직후 호출됩니다.
프로그래밍 방식으로 생성된 view controller의 경우,
이 method는 loadview가 완료된 직후 호출됩니다.
이 method의 default는 아무 작업도 하지 않는 것입니다.
Discussion만으로는 쉽게 생각하기 어려웠습니다.
때문에 제 개인적인 의견은 이렇습니다.
super는 부모(상위)class를 의미합니다.
super.xxx로 작성하면 부모클래스의 인스턴스를 참조할 수 있도록 도와주죠.
즉, override할 때
super의 작업을 실행할지말지 이 키워드를 사용유무에 따라 선택하는 것으로 보입니다.
ViewController의 view가 메모리에 로드될 때, OS에 의해 호출되기 때문에,
이 때 다른 불필요한 작업이 들어가지 않도록 super를 호출하는 것이 가장 안전해서라는게 저의 개인적인 의견입니다.
(그리고 공식문서에서 반드시 호출해야한다고 하니.. 어쩌겠어요.)
결론적으로,
"호출해서 나쁠건 없으니 호출하는 것이 좋다" 라는게 많은 분들의 의견인 것 같습니다.
관련 내용의 정확한 내용이 부족해서 포스팅하는데 많은 어려움을 겪었습니다.
하지만, 궁금증을 어느정도 해소해서 개운한 느낌이 드네요!
오류가 있거나, 피드백이 있다면 언제든지 댓글로 알려주세요!
감사합니다 :)
- 참조문서
stackoverflow: why when do we have to call super viewdidload
야곰닷컴: override할 때 super를 꼭 호출해야 하나요?
https://developer.apple.com/documentation/appkit/nsviewcontroller/1434476-viewdidload#see-also
'iOS > Xcode, UI' 카테고리의 다른 글
Alert Controller 사용하기 (0) | 2023.01.19 |
---|---|
present closure처럼 pushViewController로는 쓸 수 없는걸까? (0) | 2023.01.06 |
TableView Top(header) Padding 제거 (0) | 2022.10.22 |
Protocol과 Delegate Pattern을 이용해 Data를 가져와 표시하는 화면 구성하기. +체크표시 활성화하기 (1) | 2022.10.05 |
Protocol과 Delegate Pattern을 이용해 Data를 가져와 표시하는 화면 구성하기. (1) | 2022.09.21 |