스위프트의 모든 인스턴스는 초기화와 동시에 모든 프로퍼티에 유효한 값이 할당되어야 한다. 프로퍼티에 미리 기본값을 할당해두면 인스턴스가 생성됨과 동시에 초기값을 지니게 된다.
class PersonA {
// 모든 저장 프로퍼티에 기본값 할당
var name: String = "주영"
var age: Int = 0
var nickName: String = "주방"
}
//인스턴스 생성
let jason: PersonA = PersonA()
// 기본값이 인스턴스가 가져야 할 값이 아니라면, 생성된 인스턴스의 프로퍼티에 각각 값을 할당한다.
jason.name = "이내"
jason.age = 35
jason.nickName = "꽃이내"
프로퍼티 기본값을 지정하기 어려운 경우가 있다. 이때, init을 통해 인스턴스가 가져야 할 초기값을 전달할 수 있다.
class PersonB {
var name: String
var age: Int
var nickName: String
// 이니셜 라이즈
init(name: String, age: Int, nickName: String) {
self.name = name
self.age = age
self.nickName = nickName
}
}
// 그래서 인스턴스 생성할 때, 사용자가 직접 정보를 입력할 수 있도록 한다.
let joo: PersonB = PersonB(name: "주영", age: 35, nickName: "주방")
만약, 프로퍼티의 초기값이 필요 없을 때! 우리는 옵셔널을 사용할 수 있다.
class PersonC {
var name: String
var age: Int
var nickName: String?
// 이니셜 라이즈 1
init(name: String, age: Int, nickName: String) {
self.name = name
self.age = age
self.nickName = nickName
}
// 이니셜 라이즈 2
init(name: String, age: Int) {
self.name = name
self.age = age
}
}
let jenny: PersonC = PersonC(name: "Jenny", age: 10)
let mike: PersonC = PersonC(name: "Mike", age: 15, nikeName: "m")
struct Student {
// 인스턴스 저장 프로퍼티, 인스턴스 생성시 이미 구조체 내부에 인스턴스의 프로퍼티를 저장해놓았다.
var name: String = "" // 빈값이다.
var `class`: String = "Swift"
var koreaAge: Int = 0
// 인스턴스 연산 프로퍼티
var westernAge: Int{
get {
return koreaAge - 1
}
set(inputValue){
koreaAge = inputValue + 1
}
}
// 타입 저장 프로퍼티
static var typeDescription: String = "학생"
//읽기 전용 타입 연산 프로퍼티
// 읽기 전용에서는 get을 생략할 수 있습니다.
static var selfIntroduction: String{
return "학생타입니다."
}
}
// 타입 연산 프로퍼티 사용
print(Student.selfIntroduction) // 학생타입입니다.
//인스턴스 생성
var joobang: Student = Student()
//인스턴스 저장 프로퍼티를 사용
joobang.koreaAge = 10
joobang.name = "주영"