초기화(Initializers)란
구조체/열거형/클래스의 인스턴스를 생성하는 것이 초기화로, 초기화의 역할은 모든 프로퍼티를 기본값으로 초기화 하는 것이다. 인스턴스 내 기본값이 존재하지 않는 프로퍼티가 있을 경우, 초기화에 실패하고 인스턴스는 생성되지 않는다.
struct Human {
let name: String = "abc"
let age: Int = 123
}
struct Human {
let name: String?
let age: Int?
}
struct Human {
let name: String
let age: Int
init(name: String){
self.name = name
self.age = 123
}
}
구조체가 자동으로 제공하는 생성자로, 파라미터를 통해 모든 프로퍼티의 초기화를 가능하게 한다 => 프로퍼티의 초기화를 따로 지정하지 않을 경우, 초기화 되지 않은 프로퍼티를 초기화할 수 있는 init함수를 자동으로 제공

struct Human {
let name: String
let age: Int
}
Human.init(name: "abc", age: 123)
Human.init(age: 123, name: "abc") //에러
struct Human {
let name: String = "abc"
let age: Int
}
Human.init(age: 123)
struct Human {
var name: String = "abc"
let age: Int
}
Human.init(age: 123)
Human.init(name: "abc", age: 123)

struct Human {
var name: String
var alias: String
}
extension Human {
init(name: String) {
self.name = name
self.alias = name
}
}
Human.init(name: "abc")
Human.init(name: "abc", alias: "efg")

선언된 프로퍼티 중 하나라도 private 접근 제어자를 가질 경우, 해당 memberwise initializers 또한 접근 제어자가 private가 됨. 따라서 내부에서만 사용할 수 있고, 외부에서 더이상 사용할 수 없음.
참조
개발자 소들이