인스턴스를 생성해서 메모리 공간에 할당되는 것
초기화 과정에서 가장 중요한 것은 저장 프로퍼티임 모든 저장 프로퍼티의 초기값이 지정되어 있어야함
init(<매개변수>:타입 , <매개변수>:타입 ....){
초기화 로직
}
초기화 구문은 자신이 원하는 형태로 오버로딩하여 여러개 정의 할 수 있다.
한개 이상의 초기화 구문이 정의된 다면 init()(기본 초기화 구문)은 더이상 자동으로 적용되지 않음
struct Resolution{
var width = 0
var height = 0
init(width:Int){
self.width = width
}
}
class VideoMode{
var resolution = Resolution(width: 2048)
var interlaced = false
var frameRate = 0.0
var name : String?
init(name:String){
self.name=name
}
}
let myVideoMode = VideoMode()// 에러 발생
//
init(name:String = ""){
self.name=name
}
//티폴트 매개변수로 해결 가능함
class Base{
var baseValue :Double
init(inputValue:Double){
self.baseValue = inputValue
}
}
class ExBase :Base{
override init(inputValue:Double){
super.init(inputValue:3.0)
}
}
객체를 생성하면서 부모초기화 구문 실행 super.init
class Base{
var baseValue:Double
init(){
self.baseValue = 0.0
print("Base Init")
}
}
class ExBase: Base{
override init() {
print("ExBase Init")
}
}
ExBase()
/*
output
ExBase Init
Base Init
*/
기본 초기 화 구문은 자식부터 실행
→ 명시적으로 어떤 초기화 구문을 선택할 것인지 설정해주지 않으면 오류 발생
class Base{
var baseValue:Double
init(){
self.baseValue = 0.0
print("Base Init")
}
init(baseValue:Double){
self.baseValue = baseValue
}
}
class ExBase: Base{
override init() {
super.init()
}
}