super.viewDidLoad를 호출하는 이유는?

monica·2022년 8월 8일
0

iOS

목록 보기
1/1

사전지식

superclass

다른 클래스로부터 상속받은 클래스는 subclass라고 하고, 그 다른 클래스는 superclass라고 부른다.

override

superclass의 메서드, 프로퍼티 등을 subclass에서 재정의하는 것을 말한다. 오버라이딩할 때는 메서드 등의 이름 앞에 override 키워드를 붙여준다.

오버라이딩된 메서드의 이름이 someMethod()일 때, superclass 버전의 someMethod()를 호출하려면 아래와 같이 써주면 된다.

super.someMethod()

viewDidLoad

viewControllerview가 메모리에 로드된 후 호출된다.

공식문서에 따르면 일반적으로 nib 파일로부터 로드된 view에 대해 추가적인 초기화를 할 때 이 메서드를 오버라이딩한다.

nib

UI를 저장하는 데 쓰이는 리소스 파일의 타입을 말한다.

super.viewDidLoad를 호출하는 이유

사실 오버라이딩된 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)

Why/when do we have to call super.ViewDidLoad?

Nib file

profile
J에서 P가 되는 중

0개의 댓글