일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 호키스
- 개발자
- 자료구조
- jest
- 계명대 이종호
- 스벨트
- 리액트
- Svelte
- 비동기
- 이종호
- TDD
- javascript
- 스위프트
- 호키도키
- 계명대
- 리액트 예제
- hokidoki
- 개발
- queue
- HTML
- 자바스크립트
- react
- data structure
- 자바스크립트 자료구조
- Hitit
- hokeys
- IOS
- 힛잇
- SWIFT
- 자스민
Archives
- Today
- Total
Dog foot print
[SWIFT] 초기화 본문
초기화 구문
초기화 구문은 init
으로 시작되는 생성자 함수를 의미합니다. 초기화 구문의 가장 큰 목적은 인스턴스 마다 멤버 프로퍼티의 값을 “설정하기 위함” 입니다.
TIP : 멤버 와이즈 초기화 구문은 구조체만 가능합니다.
초기화 메서드 특성
초기화 메서드의 형식은 다음과 같습니다.
init([param] : [type]){
//실행할 코드
}
Tip : 만약 설정할 멤버가 존재하지 않는다면 init 메서드는 생략 할 수 있습니다.
초기화 메서드의 특성은 다음과 같습니다.
- 초기화 메서드의 이름은 무조건
init
이다. - 매개변수의 개수, 이름, 타입은 임의로 정할 수 있으나, 해당 init 구문을 통해서 옵셔널 타입을 제외한 모든 저장 프로퍼티는 값을 가지고 있어야 한다.
- 매개변수의 이름과 개수, 타입이 서로 다른 여러 개의 초기화 메서드를 정의 할 수 있다.
- 이것이 가능한 이유는 스위프트가
orverloading
을 지원하기 때문이다.
- 이것이 가능한 이유는 스위프트가
- 정의된 초기화 메서드는 직접호출되기도 하지만, 대부분 인스턴스 생성 시 간접적으로 호출된다.
직접 호출 예제
import UIKit
class SuperClass{
func foo(){
print("hello")
}
}
let superOBJ = SuperClass.init() // 직접 호출
let superOBJ2 = SuperClass() //간접 호출
초기화 메서드의 오버라이딩
import UIKit
class SuperClass{
var age : Int
init(age : Int) {
print("Super Class !");
self.age = age;
}
func foo(){
print("hello")
}
}
class SubClass : SuperClass{
override init(age : Int){
super.init(age : age);
print("Sub Class!")
}
}
let subOBJ = SubClass(age : 10)
//super class !
//sub Class
초기화 구문 역시 메서드의 일종이기 때문에, 이를 오버라이딩 하기 위해서는 overriding
예약어를 붙여주어야 합니다. 다만 새롭게 오버라이딩 하여도 슈퍼클래스의 초기화 구문에서는 실행해주지만 서브 클래스에서 오버라이딩 한 초기화에서 실행하지 않는 구문으로 인하여 오류가 발생 할 수 있으니 초기화 메서드를 오버라이딩 하였을 때는 오버라이딩 된 init
을 호출 하여야 합니다.
초기화 델리게이션
import UIKit
class SuperClass{
init (){
print("Super Class")
}
func foo(){
print("hello")
}
}
class SubClass : SuperClass{
override init(){
print("Sub Class!")
}
}
let subOBJ = SubClass()
초기화 델리게이션
은 부모의 초기화 구문을 오버라이딩 한 초기화에서 호출 하여, 연속적으로 Root Class 까지 호출이 발생하는 것을 의미합니다. 이 때 오버라이딩 한 초기화 구문이 파라메터가 존재하지 않고, 부모 또한 init()
식별자의 초기화 구문만 존재한다면, 오버라이딩 한 초기화 구문에서는 super.init()
을 통해 부모의 초기화 구문을 호출 하지 않아도 됩니다. 만약 부모의 초기화 구문이 init()
외에 다른 식별자를 가진 초기화 구문이 존재한다면 super.init
을 호출하여야 합니다.
import UIKit
class SuperClass{
init (){
print("Super Class")
}
init(age : Int){
print(age.description);
}
func foo(){
print("hello")
}
}
class SubClass : SuperClass{
override init(){
super.init()
print("Sub Class!")
}
}
let subOBJ = SubClass()
반응형
'IOS > Swift' 카테고리의 다른 글
[SWIFT] protocol (0) | 2021.07.21 |
---|---|
[SWIFT] enumeration (0) | 2021.07.21 |
[SWIFT] Type casting (0) | 2021.07.20 |
[SWIFT] 상속 (0) | 2021.07.15 |
[SWIFT] 메서드 (0) | 2021.07.13 |
Comments