250x250
KemiKIM
29 to iOS
KemiKIM
GitHub
Loading data ...
  • 분류 전체보기 (41)
    • 지금 : 세상에서 가장 간단한 메모 앱 (1)
    • iOS (22)
      • Swift (4)
      • Xcode, UI (7)
      • And (9)
      • 이것이 삽질이다. (2)
    • other (18)
      • Error Solution (8)
      • a Little Tip (5)
      • Mac Start Setting (5)
    • Project (0)
hELLO · Designed By 정상우.
KemiKIM

29 to iOS

super.viewDidLoad() 꼭 호출해야할까?
iOS/Xcode, UI

super.viewDidLoad() 꼭 호출해야할까?

2022. 5. 24. 23:29

(Macbook Air M1 8-256 Monterey 12.5.1 Xcode 13.1)

Why?

새로운 UIViewController file을 생성할 때 보면

언제나 override func viewDidLoad() 하단에

super 키워드를 단 super.viewDidLoad()가 생성됩니다.

하단에 생성된 super.viewDidLoad()

 

저번 포스팅에서 View생명주기를 공부하면서 viewDidLoad()가 무엇인지 대략적으로 알 수 있었는데요.

그래서 그런지 하위에 항상 들어가있는 super 키워드가 항상 궁금했었습니다. 

"반드시 넣어줘야하는 항목인건가?" 하고요.

 

 

 


 

 

그래서 꼭 호출해야 할까?

stackoverflow에 실제로 이와 동일한 질문이 올라온적이 있더라고요. (관련링크)

정확히 저와 같은 궁금증의 질문이였는데요.

해당 사이트의 답변을 참고해도 저는 잘 이해가 가지는 않아서...

(결론적으로 안 쓰면 실행이 안되니 그냥 써라 라는 내용) 

 

 

혹여나 제 글을 읽으시고 이해가 안되신다면 관련링크로 들어가셔서 확인하시는게 도움이 되실 것 같습니다.

 

 

 

우선 공식 문서에 나와있는 viewDidLoad() Discussion을 살펴보겠습니다.

Apple 공식문서

개인적인 해석은 다음과 같습니다.(해석이 잘못되었을 수 있습니다.)

 

이 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
    'iOS/Xcode, UI' 카테고리의 다른 글
    • present closure처럼 pushViewController로는 쓸 수 없는걸까?
    • TableView Top(header) Padding 제거
    • Protocol과 Delegate Pattern을 이용해 Data를 가져와 표시하는 화면 구성하기. +체크표시 활성화하기
    • Protocol과 Delegate Pattern을 이용해 Data를 가져와 표시하는 화면 구성하기.
    KemiKIM
    KemiKIM
    안녕하세요! iOS App Developer를 희망하는 주니어 개발자입니다.

    티스토리툴바