프로퍼티의 선언과 동시에 값을 할당하면 그 값을 초기 값으로 사용할 수 있다.
+) 항상 초기값을 가지면 프로퍼티 선언과 동시에 초기 값을 할당하는게 좋다.
⇒ 최종 결과는 동일하지만 기본 값은 프로퍼티의 초기화를 해당 선언 시점과 더 밀접하게 연결함으로써 더 짧고 명확한 이니셜라이저를 만들 수 있고, 프로퍼티의 타입을 추론할 수 있기에 코드가 짧아진다.
class SoptMember {
let name: String = "류희재"
let part: String = "iOS"
}
만약 값이 있을지도 없을지도 모를 경우에는 옵셔널 타입으로 설정하면 된다.
⇒ 초기화를 할때 var로 선언한 옵셔널 타입의 프로퍼티는 자동으로 nil로 초기화
let으로 선언하고 기본값을 안 주면 에러가 뜸 → 생성자가 불릴 때 nil로 초기화 될텐데, 상수기 때문에 더이상 nil 외에 값을 가질 수 없어서 에러가 나는 것.. 아..닐까..?
class SoptMember {
var name: String?
var part: String?
}
class SoptMember { // error: Class 'SoptMember' has no initializers
let name: String?
let part: String?
}
초기화를 진행 하는 함수를 바로 init 함수(= 생성자) ⇒ 생성자 안에서 해당 프로퍼티들을 초기화 시킬 수 있다
이때, 초기화는 모든 프로퍼티를 초기화 해줘야 한다!
class SoptMember{
let name: String
let part: String
init(name: String, part: String) {
self.name = name
self.part = part
}
}
⇒ 이건 구조체 초기화에서도 언급했듯이, Memberwise Initializers가 없기 때문인데,
그럼 왜 클래스에는 없는걸까?
struct SoptMember {
var name: String
var part: String
}
class SoptMember {
var name: String
var part: String
}
struct는 상속이 불가능하다 → init이 무조건 필요하다