기본 이니셜라이저와 멤버와이즈 이니셜라이저
기본 이니셜라이저는 저장 프로퍼티의 기본값이 모두 지정되고,
동시에 사용자 정의 이니셜라이저가 정의되지 않을 떄 사용
struct Market {
var name: String = "E-Mart"
}
저장 프로퍼티를 선언할 때 기본값을 지정하지 않으면 이니셜라이저에서 초기값을 설정해야하는데
구조체에서는 프로퍼티 이름으로 매개변수를 갖는 멤버와이즈 이니셜라이저를 기본으로 제공
(단, 클래스는 멤버와이즈 이니셜라이저 미제공)
구조체 Fruit의 멤버와이즈 이니셜라이저
struct Fruit {
var name: String
var price: Int
}
Fruit.init() // error: missing arguments for parameters 'name', 'price' in call
Fruit 구조체를 보면 내부에 저장 프로퍼티가 기본값을 갖고 있지 않음
이럴 경우 초기화되지 않은 저장 프로퍼티를 초기화 할 수 있도록
"init" 함수를 제공 (= 멤버와이즈 이니셜라이저)
이 때 init() 메소드 내의 파라미터의 순서는
구조체 내 선언된 저장 프로퍼티 순서와 맞춰야 함
Fruit.init(name: "no Name", price: 0)
만약에 저장 프로퍼티가 let 으로 선언되어 있고,
초기화가 되어 있는 상태면 생성자 목록에서 제외
("let"으로 선언되고, 초기값을 가질 경우는 값을 수정할 수 없기 때문)
struct Fruit {
let name: String = "No name"
var price: Int
}
Fruit.init() // error: missing argument for parameter 'price' in call
만약에 사용자 정의 이니셜라이저를 통해 "직접" 생성한 경우에는
더 이상 멤버와이즈 이니셜라이저는 제공되지 않음
(만약에 init도 쓰고 싶다면 "extension" 키워드를 통해
Fruit 구조체를 확장할 경우 가능)
struct Fruit {
var name: String
var price: Int
init(name: String, price: Int) {
self.name = name
self.price = price
}
}
Fruit.init() // 미제공
구조체 내 저장 프로퍼티 중에 1개라도 "private" 으로 선언될 경우
멤버와이즈 이니셜라이저는 선언되지 않음
'iOS > Swift' 카테고리의 다른 글
인스턴스 생성 및 소멸 4편 (실패 가능한 이니셜라이저) (0) | 2024.01.31 |
---|---|
인스턴스 생성 및 소멸 3편 (초기화 위임) (0) | 2024.01.31 |
인스턴스 생성 및 소멸 1편 (0) | 2024.01.29 |
메서드 (0) | 2024.01.26 |
프로퍼티 4편 (타입 프로퍼티) (1) | 2024.01.25 |