Swift 공부하면서 정리.
Swift의 객체는 사용하기 전에 반.드.시 모든 저장 프로퍼티에 대한 초기화를 해야 한다.
시스템 자체적으로 초기화 시켜주지 않기에 3가지 방법 중 1가지 택 하여 초기화 해주어야 한다.
● Swift 초기화 방법은 3가지.
1. 초기값 지정. ex) let length = 0 2. 옵셔널- nill 값으로 초기 화 ex) let length: Int? 3. 초기값이 없고, 옵셔널 타입이 아닌 프로퍼티 - Initializer를 통해 초기화 |
3중 하나 선택하지 않으면 Error 발생!
기본 init 함수를 생성해서 특정 값을 넣어 주든, 입력 값을 받아 넣어 주든 반드시 초기값을 지정해 주어야함.
● Swift 초기화 종류 3가지
1. Designated Initializer 2. Convenience Initializer : 단독으로 모든 프로퍼티를 초기화 할 수 없고, 일부 프로퍼티만 처리한 뒤, 다른 Initializer를 통화 전체 초기화 수행 3. Failable Initializer : 실패 가능한 이니셜라이저. 원하는 초기값이 들어 오지 않는 경우 객체를 생성하지 않도록 할 수 있는 방법. 옵셔널 형태의 초기화 함수 Init?, 초기화 실패 시에는 nil 반환. |
● 상속 관계에서의 초기화
1) 수퍼 클래스의 초기화
서브 클래스는 자기 자신의 프로퍼티 이외에도 수퍼 클래스의 저장 프로퍼티까지 초기화 해주어야 하는데, 만약 수퍼 클래스의 Designated Initializer가 기본 init 함수 하나만 있을 경우는 별도로 super init()을 명시하지 않아도 자동으로 호출 됨.
2) 수퍼 클래스의 초기화 순서
수퍼 클래스의 Initializer는 반.드.시 자기 자신의 프로퍼티로 부터 모두 초기화 한 후 호출해야 함.
why? 수퍼클래스에서 아직 초기화 하지 않은 자신의 프로퍼티를 호출 할 수도 있기 때문.
3) 초기화 한 뒤 값 대입 타이밍?
또한 수퍼클래스의 프로퍼티 값에 특정 값을 넣고 싶어도, 수퍼클래스의 초기화 메서드를 호출하여 초기화 한 후에만 값을 대입할 수 있음.
자식 클래스의 프로퍼티를 다 초기화 한 뒤, 맨 마지막에 super로, 수퍼 클래스의 프로퍼티를 이니셜라이즈 하는게,
마치 자식들이 나갈 수 있게 (인스턴스화 다 되게 하고나서) 다 챙겨준 다음 엄마가 나갈 준비하는 듯한 모습?
● Initializer의 다른 특징들
1) 초기화 이전에 다른 인스턴스 메서드 호출 불가.
당연한듯, 인스턴스가 생성되지 않았는데, 그것과 관련 된 메서드를 쓸 수는 없을 듯.
2) Extension Initializer
Convenience Initializer는 추가 할 수 있어도, Designated Initializer는 할 수 없다.
3) Required init
상속 받은 클래스에서 반드시 작성해주어야 하는 초기화 메서드가 있다면 required 붙여주기. 이 경우 서브 클래스에서는 해당 초기화 메서드를 반드시 작성해 주어야 한다.
override 키워드는 생략된다.
● 객체 Deinitializer
할당 된 객체가 해제 될 때, deinit 메소드 호출 된다. 별도로 수행해 주어야할 코드가 있다면 이 함수를 사용하면 됨.
출처.
http://blog.naver.com/PostView.nhn?blogId=itperson&logNo=220995098199&categoryNo=103&parentCategoryNo=0&viewDate=¤tPage=1&postListTopCurrentPage=1&from=postView
'Coding' 카테고리의 다른 글
Swift UIAlertController 만들기 (0) | 2017.11.26 |
---|---|
Swift Type Casting(형 변환)에 대해서 (0) | 2017.11.25 |
비전공자의 개발 공부_ JavaScript&PHP_변수 By 생활코딩 Day8 (0) | 2016.10.12 |
비전공자의 개발 공부_ JavaScript&PHP_디버그 By 생활코딩 Day7 (0) | 2016.10.11 |
비전공자의 개발 공부_ JavaScript&PHP By 생활코딩 Day6 (0) | 2016.10.10 |