지난 번에 loadView() 메서드를 처음 사용하며 습관처럼 super를 붙여주었다가 뷰가 불러와지지 않아 몇시간 정도 삽질을 했었다. (다음 포스팅 참고 → [iOS] loadView() 오류: Could not load NIB in bundle '~ (loaded)' with name '~ViewController')
내가 알기로 super의 문법적 의미는 이렇다.
- 부모 클래스의 내용을 불러옴 (= 부모 클래스를 사용하겠다는 의미)
- 메서드를 오버라이딩 시 부모 메서드의 작업을 실행할 지 말지를 선택하는 것
iOS App을 개발할 때에는 보통 이렇게 사용된다.
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
👀 viewDidLoad() → 뷰 라이프 사이클을 담당하는 함수
- 템플릿으로 구현되어 있다.
- 뷰 컨트롤러의 뷰가 메모리에 로드될 때, OS에 의해 호출된다.
- 뷰를 기초 세팅 해주는 (그려주는) 작업을 수행한다. 이후 다른 작업들이 실행된다.
- nib 파일로 구현된 뷰 컨트롤러의 경우, 이 메서드가 가장 먼저 호출되고 난 후 호출된다.
👀 super.viewDidLoad()를 붙여주는 의미
- 앞서 viewDidLoad()는 뷰를 기초 세팅해주는 작업을 수행한다고 했는데, 상속받은 부모 메서드를 super 를 통해 불러오면 이러한 기초 세팅들을 마무리하겠다는 의미가 된다.
- 예를 들어서 override func viewDidLoad() 와 super.viewDidLoad() 사이에 어떠한 다른 작업들을 넣어주게 된다면 viewDidLoad() 의 세팅이 끝나지 않은 상태에서 적어준 코드들을 실행하게 되므로, 원하는 동작이 제대로 수행되지 않거나 버그가 발생할 수 있다.
결론
- super 는 필수가 아니라 선택이기 때문에 굳이 매번 붙여주지 않아도 된다!
- 하지만 메모리의 관리를 생각해서 되도록이면 습관적으로 붙여주는 것이 좋다.
참고
- override 할 때 super 꼭 호출해야 하나요???
- viewDidLoad()
'공부 > computer science' 카테고리의 다른 글
[컴퓨터네트워크] 2. Network edge, Network core (0) | 2022.08.06 |
---|---|
[컴퓨터네트워크] 1. 인터넷이란? (1) | 2022.08.06 |
비동기 처리하는 이유 (3) | 2022.03.18 |
예외 처리를 하는 이유 (0) | 2022.03.18 |
JPEG vs PNG (0) | 2022.03.17 |
댓글