초기화랑 생성자란?
초기화는 인스턴스를 생성하는 과정
- 각 저장속성에 대한 초기값을 설정하여 인스턴스를 사용 가능한 상태로 만드는것
(열거형은 case중에 한가지를 선택하여 생성)
- 초기화할때 인스턴스의 모든 저장속성이 값을 갖게 하는것이 생성자의 역할
생성자 구현
- 초기화 방법
1. 저장속성의 선언과 동시에 값 저장
2. 저장속성을 옵셔널로 선언 (초기값 없어도 nil로 초기화)
3. 생성자에서 값 초기화
- 1, 2번방식으로 초기화시 이니셜라이저를 구현 하지 않아도
기본생성자가 자동으로 생성됨
// 1. 선언과 동시에 초기값 지정
class Num {
var num1 = 1
var num2 = 1
var num3 = 1
// init() { } 자동으로 기본 생성자 제공
}
// 2. 저장속성 옵셔널로 선언
class Num {
var num1: Int?
var num2: Int?
var num3: Int?
// init() { } 자동으로 기본 생성자 제공
}
// 3. 생성자에서 값 초기화
class Num {
var num1: Int
var num2: Int
var num3: Int
init(num1: Int, num2: Int, num3: Int) {
self.num1 = num1 // 생성자의 파라미터로 받아온 값을
self.num2 = num2 // 자기 자신의(self) 프로퍼티 값으로 초기화
self.num3 = num3
}
}
let num1 = Num(num1: 1, num2: 2, num3: 3) // () <- 생성자
생성자의 오버로딩
생성자도 오버로딩을 지원한다
class Num {
var num1: Int = 1
var num2: Int = 1
var num3: Int = 1
// 생성자도 오버로딩을 지원함
init() { } // 프로퍼티에 기본값 있을때만 기본생성자 사용가능
// 생성자를 생성시 초기값이 있어도 기본생성자를 자동으로 제공해주지 않는다
init(defaultNum: Int) {
self.num1 = defaultNum
self.num2 = defaultNum
self.num3 = defaultNum
}
init(num1: Int, num2: Int, num3: Int) {
self.num1 = num1 // 생성자의 파라미터로 받아온 값을
self.num2 = num2 // 자기 자신의(self) 프로퍼티 값으로 초기화
self.num3 = num3
}
}
let num1 = Num() // 기본생성자
let num2 = Num(defaultNum: 2)
let num3 = Num(num1: 1, num2: 2, num3: 3)
구조체의 멤버와이즈 이니셜라이저
구조체는 저장속성에 기본값이 있든 없든 멤버와이즈 이니셜라이즈를 제공해준다
(개발자가 직접 생성자 구현시 제공x)
struct Num {
var num1: Int
var num2: Int
var num3: Int
// 생성자 구현 안해도 자동으로 멤버와이즈 이니셜라이저 제공
}
let num = Num(num1: Int, num2: Int, num3: Int)
'Swift > 문법' 카테고리의 다른 글
[Swift] 초기화(Initialization)와 생성자(Initializer) (3/5) 상속과 초기화 (0) | 2022.04.09 |
---|---|
[Swift] 초기화(Initialization)와 생성자(Initializer) (2/5) 지정생성자와 편의생성자 (0) | 2022.04.09 |
[Swift] 상속 및 재정의(3/3) 메서드의 재정의 (0) | 2022.04.03 |
[Swift] 상속 및 재정의(2/3) 프로퍼티의 재정의 (0) | 2022.04.03 |
[Swift] 상속 및 재정의(1/3) 상속의 기본 개념 (0) | 2022.04.03 |