본문 바로가기

iOS/iOS 기술 면접

Convenience init

이번에는 Convenience init에 대해 알아보겠습니다!

 

생성자에 대한 모든 걸 다룰려면 글이 엄청 길어지니깐 간단하게 설명해보겠습니다.

 

생성자(initializer)가 먼데요

  • Struct, Class, Enum의 인스턴스(객체)를 생성하는 것
  • 모든 프로퍼티가 포함되어야 하고, 기본값이 초기화되지 않으면 인스턴스는 생성되지 않음!

→ 인스턴스를 만들려면 모든 프로퍼티가 값을 가져야 한다는 말임!!!!!!!!!!1

그럼 초기화 어케 하는데요?

구조체, 클래스를 초기화하는 방법은 다음과 같습니다.

  1. 프로퍼티를 만들자마자 기본 값을 넣어주기
  2. 옵셔널로 선언하기 → 값이 없으면 nil로 초기화되므로
  3. init() 함수(생성자) 를 이용해서 값 설정

근데 여기서 살짝 의문이 생길수도 있음 struct 할 때는 초기화를 안해도 되걸랑(class는 해야함, 에러남)

구조체는 왜 될까??

       Struct의 경우 memberwise initializer를 기본으로 제공하기 때문에 별도로 없어도 됨!!!!

그래서 클래스는 생성자를 쓸 경우 모든 프로퍼티가 포함되어야 함!

  • 이때 사용할 수 있는 생성자는 두 가지가 있음!!!!

Designated Initalizers

  • 평소에 우리가 쓰는 init()을 나타냄
  • 이 함수가 끝나기 전에 내부의 모든 프로퍼티는 초기화되어 있어야 함!
  • 그리고 만약 상속이 되었을 경우, 무조건 슈퍼 클래스의 Initalizers를 호출해줘야함
    • 왜냐면 슈퍼 클래스의 파라미터가 초기화되지 않았을 수도 있으니깐!

Convenience init

  • 말 그대로 편의를 위한 생성자이며 얘 혼자서 쓰일 수는 없음.
    • 동일한 클래스의 Designated Initalizers가 함께 쓰여야 함
  • Designated Initalizers의 파라미터 일부를 초기화할 때 사용할 수 있음.
    • 모든 프로퍼티를 초기화하기 위해 쓰는 생성자가 아니에요!

'iOS > iOS 기술 면접' 카테고리의 다른 글