생성자는 다음과 같이 사용할 수 있다.
// 학생인데 운동선수
class StudentAthlete: Student {
var minimumTrainingTime: Int = 2
var trainedTime: Int = 0
var sports: [String]
init(firstName: String, lastName: String, sports: [String]) {
// Phase1
self.sports = sports
super.init(firstName: firstName, lastName: lastName)
//Phase2
self.train()
}
func train() {
trainedTime += 1
}
}
만약 Phase1에서 인스턴스 메소드를 호출하게 되면 다음과 같은 에러 메시지를 띄워준다.
Convenience
상속을 통해 클래스가 기능을 계속 확장하다보면, 새로운 Stored property가 선언되는 경우가 다반사다.
그럼 그에 따라 초기화 해야할 프로퍼티가 늘어나는 것이고, 결국은 생성자에 선언할 파라미터가 상당히 많아질 것이다.
하지만 이중에서 사용되지 않는 것도 있을 것이고, 또 너무 많이 늘어나게 되면 코드의 가독성도 떨어지게 된다.
이때 Convenience를 사용하면 이니셜라이저에 너무 많은 파라미터를 편리하게 줄여쓸 수 있다. 그러니깐 우리의 입맛에 맞게 생성자를 사용할 수 있게 해주는 기능인 것이다.
그냥 생성자가 주 이니셜라이저(designated initializer), convenience가 붙은 이니셜라이저는 부생성자이다.
// 학생인데 운동선수
class StudentAthlete: Student {
var minimumTrainingTime: Int = 2
var trainedTime: Int = 0
var sports: [String]
init(firstName: String, lastName: String, sports: [String]) {
// Phase1
self.sports = sports
super.init(firstName: firstName, lastName: lastName)
//phase2
self.train()
}
convenience init(name: String){
self.init(firstName: name, lastName: "", sports: [])
}
func train() {
trainedTime += 1
}
}
let student1 = Student(firstName: "Dew", lastName: "Lee")
let student2 = StudentAthlete(firstName: "Jay", lastName: "Lee", sports: ["Football"])
let student3 = StudentAthlete(name: "Mike") // convenience 이니셜라이저
아래와 같이 부모 클래스의 이니셜라이저를 override 해서 사용할 수도 있다.
class Student: Person {
var grades: [Grade] = []
override init(firstName: String, lastName: String) {
super.init(firstName: firstName, lastName: lastName)
}
convenience init(student: Student) {
self.init(firstName: student.firstName, lastName: student.lastName)
}
}
let student1 = Student(firstName: "Dew", lastName: "Lee")
let student1_1 = Student(student: student1) // convenience 이니셜라이저
패스트캠퍼스 [직장인 실무교육]
프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.
fastcampus.co.kr
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
'iOS > iOS 앱 개발 올인원 패키지 Online' 카테고리의 다른 글
[iOS] 패스트캠퍼스 챌린지 28일차 - UITableView(1) (0) | 2021.10.03 |
---|---|
[iOS] 패스트캠퍼스 챌린지 27일차 - Class.생성자(3) (0) | 2021.10.02 |
[iOS] 패스트캠퍼스 챌린지 25일차 - Class.생성자(1) (0) | 2021.09.30 |
[iOS] 패스트캠퍼스 챌린지 24일차 - Class.상속(3) (0) | 2021.09.29 |
[iOS] 패스트캠퍼스 챌린지 23일차 - Class.상속(2) (0) | 2021.09.28 |