추후 복습을 위해 야곰님의 스위프트 프로그래밍(3판) 교재를 정리한 것임을 밝힙니다.
클론 프로젝트를 진행하다가 UIViewController가 부모클래스/프로토콜 (뭐가 맞는지 모르겠다, 아마 프로토콜인 것 같다)로 사용되는 클래스에서 override, super이 쓰이길래 교재(p.333)를 찾아보았다.
자식클래스가 부모클래스로부터 물려받은 특성(인스턴스 메서드, 타입 메서드, 인스턴스 프로퍼티, 타입 프로퍼티, 서브스크립트 등)을 그대로 사용하지 않고, 자신만의 기능으로 변경하여 사용하는 것
override func someMethod() {}
super.someMethod() //부모 버전의 메소드 호출
super.someProperty //부모 버전 프로퍼티에 접근
super[index] //부모 버전의 서브스크립트로 접근
추가 문법
class Person {
var name: String = ""
var age: Int = 0
var introduction: String {
return "이름 \(name) 나이 \(age)"
}
class func introduceClass() -> String {
return "인류의 소원은 평화입니다."
}
}
class UniStudent: Student { //Student가 부모클래스임
var major: String = ""
class func introduceClass() {
print(super.introduceClass()) //인류의 소원은 평화입니다.
}
override class func introduceClass() -> String {
return "대학생의 소원은 A+입니다."
}
override func speak() {
super.speak()
print("대학생이죠.")
}
}
var mina: UniStudent = UniStudent()
mina.speak() //대학생이죠.
UniStudent클래스에서 introduceClass가 2개가 정의되어있다.
이 둘은 반환타입으로 구별하면 된다
print(UniStudent.introduceClass() as String) //대학생의 소원은 A+입니다.
UniStudent.introduceClass() as Void //인류의 소원은 평화입니다.