이번에는 Convenience init에 대해 알아보겠습니다!
생성자에 대한 모든 걸 다룰려면 글이 엄청 길어지니깐 간단하게 설명해보겠습니다.
생성자(initializer)가 먼데요
- Struct, Class, Enum의 인스턴스(객체)를 생성하는 것
- 모든 프로퍼티가 포함되어야 하고, 기본값이 초기화되지 않으면 인스턴스는 생성되지 않음!
→ 인스턴스를 만들려면 모든 프로퍼티가 값을 가져야 한다는 말임!!!!!!!!!!1
그럼 초기화 어케 하는데요?
구조체, 클래스를 초기화하는 방법은 다음과 같습니다.
- 프로퍼티를 만들자마자 기본 값을 넣어주기
- 옵셔널로 선언하기 → 값이 없으면 nil로 초기화되므로
- init() 함수(생성자) 를 이용해서 값 설정
근데 여기서 살짝 의문이 생길수도 있음 struct 할 때는 초기화를 안해도 되걸랑(class는 해야함, 에러남)
구조체는 왜 될까??
Struct의 경우 memberwise initializer를 기본으로 제공하기 때문에 별도로 없어도 됨!!!!
그래서 클래스는 생성자를 쓸 경우 모든 프로퍼티가 포함되어야 함!
- 이때 사용할 수 있는 생성자는 두 가지가 있음!!!!
Designated Initalizers
- 평소에 우리가 쓰는 init()을 나타냄
- 이 함수가 끝나기 전에 내부의 모든 프로퍼티는 초기화되어 있어야 함!
- 그리고 만약 상속이 되었을 경우, 무조건 슈퍼 클래스의 Initalizers를 호출해줘야함
- 왜냐면 슈퍼 클래스의 파라미터가 초기화되지 않았을 수도 있으니깐!
Convenience init
- 말 그대로 편의를 위한 생성자이며 얘 혼자서 쓰일 수는 없음.
- 동일한 클래스의 Designated Initalizers가 함께 쓰여야 함
- Designated Initalizers의 파라미터 일부를 초기화할 때 사용할 수 있음.
- 모든 프로퍼티를 초기화하기 위해 쓰는 생성자가 아니에요!
'iOS > iOS 기술 면접' 카테고리의 다른 글
Optional (1) | 2023.11.02 |
---|---|
AnyObject (0) | 2023.11.02 |
Copy On Write는 어떤 방식으로 동작할까? (0) | 2023.10.31 |
Class의 성능을 향상 시킬 수 있는 방법 (1) | 2023.10.31 |
Struct와 Class와 Enum의 차이 (0) | 2023.10.30 |