본문 바로가기
공부/computer science

override할 때 super를 꼭 붙여줘야 할까?

by 마자용 2022. 4. 3.

지난 번에 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() 의 세팅이 끝나지 않은 상태에서 적어준 코드들을 실행하게 되므로, 원하는 동작이 제대로 수행되지 않거나 버그가 발생할 수 있다.

 

결론

  1. super 는 필수가 아니라 선택이기 때문에 굳이 매번 붙여주지 않아도 된다!
  2. 하지만 메모리의 관리를 생각해서 되도록이면 습관적으로 붙여주는 것이 좋다.

 

 

참고
 - 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

댓글