티스토리 뷰

iOS

[Swift] required init, super init

Peppo 2023. 4. 20. 08:22
728x90

어떤건 required init에 구현해야하고, 어떤건 super.init에 구현되어야 하는데 이유가 궁금해졌습니다.


required init

 

먼저 required init은 단어 그대로 '필수적인' init 인데, 사용하는 방법은 여러가지 방법이 있습니다.

 


하위클래스 required init() 생략

 

상위클래스를 상속받는 하위 클래스 예시 코드를 먼저 봅시다.

 

하위클래스(ChildClass)에서 requried init() 메서드 호출이 없어도 자동적으로 상속받는 상위클래스(ParentClass)의 required init을 호출하게 되어 10이 출력됩니다.

 


하위 클래스 required init() 구현

 

그럼 하위클래스의 required init() 메서드를 호출하면 어떻게 될까?

 

  1. 하위클래스(ChildClass)의 required init() 호출
  2. 상위클래스(ParentClass)의 required init() 호출

하위클래스에 required init()을 구현하게 되면 하위클래스(ChildClass) 객체 초기화시 상위클래스(ParentClass)의 required init()이 자동으로 호출되기 때문에 super.init()을 작성하지 않아도 됩니다. 

 


super.init()은 이럴때 씁니다.

 

상위 클래스의 required init()에 파라미터가 있으면 하위클래스의 required init()에 super.init()을 호출해야 합니다.

이해를 돕기 위해 예시를 보죠. (super.init()을 하지않았을 때)

 

컴파일 에러

super.init을 호출하라는 컴파일 에러가 납니다.

 

아래처럼 super.init을 호출해주면

 

해결!

 

print 되는 결과를 보면 

  1. Child가 먼저 print되고
  2. super.init(message) 이 호출됩니다.

 

즉, 초기화 LifeCycle은 아래와 같습니다.

  1. 하위 클래스 required init()
  2. super.init()
  3. 하위클래스 method, property

정리

 

그럼 처음 질문으로 돌아가서 

어떨때는 required init에 구현되야하고, 어떨때는 super.init() 이후에 구현되어야 하는지 정리를 해보면

 

 

하위클래스 required init()에 구현되어야 하는건 상위클래스 초기화 보다 일찍 구현되어야 할때 사용.

super.init() 이후에 구현되어야 하는건 하위클래스의 method, property에 접근할때 사용됩니다.

 


참고

1. https://sonihemant111.medium.com/required-initializers-in-swift-4805de8ade9e

 

Required Initializers in swift

Required initializers will be explained in this article.

sonihemant111.medium.com

2. https://www.inflearn.com/questions/33683/%EB%B0%98%EB%93%9C%EC%8B%9C-required-init%EC%9D%84-%EC%83%9D%EC%84%B1%ED%95%B4%EC%95%BC%ED%95%98%EB%8A%94-%EC%9D%B4%EC%9C%A0%EA%B0%80-%EB%AD%94%EA%B0%80%EC%9A%94

 

반드시 required init을 생성해야하는 이유가 뭔가요?? - 인프런 | 질문 & 답변

ios를 배우면서  required init을 왜 사용하는지 잘 모르겠습니다  required init에 대해  알려주시면 감사하겠습니다 - 질문 & 답변 | 인프런

www.inflearn.com

 

728x90

'iOS' 카테고리의 다른 글

[iOS] Localization - 다국어 지원  (0) 2023.05.16
[iOS]긴급심사 요청  (0) 2023.05.07
[iOS] FileManager - 폴더, 파일 생성 & 삭제  (0) 2023.04.04
[iOS] AVAssetWriter로 비디오 저장  (2) 2023.03.26
RxSwift - Reactive Extensions (.rx)  (0) 2023.03.11