swift 기본문법 - 상속(Inheritance)
16 Jan 2020 | swift개인공부 후 자료를 남기기 위한 목적임으로 내용 상에 오류가 있을 수 있습니다.
인프런, 야곰의 스위프트 기본문법 강좌를 듣고 정리하였습니다.
상속(Inheritance)
- 스위프트에서의 상속은 클래스, 프로토콜 등에서 사용 가능
- 열거형, 구조체에는 상속이 불가능
- 다중상속은 지원하지 않음
class 이름: 상속받을 클래스 이름 {
구현부
}
예시는 아래와 같다.
class Person {
var name: String = ""
func selfIntroduce() {
print("저는 \(name) 입니다.")
}
// final 키워드를 사용해 자식클래스에서 재정의를 방지할 수 있다 - override 불가능
final func sayhello() {
print("hello")
}
// 타입메서드 - 재정의 불가
static func typeMethod() {
print("type method - static")
}
class func classMethod() {
print("type method - class")
}
// 재정의 가능한 class 메서드지만 final 키워드를 사용하면 재정의 할 수 없다.(static = final class)
final class func finalClassMethod() {
print("type method - final class")
}
}
class Student: Person {
var major: String = ""
oerride func selfIntroduce() {
print("저는 \(name)이고, 전공은 \(major)입니다")
}
override class func classMethod() {
print("overriden type method - class")
}
}
Student 클래스는 Person클래스를 상속받아 온것이기 때문에 아래의 코드는 실행이 안된다.
- var name: String > name 변수를 재정의하는 행위
- override static func typeMethod() > static을 사용한 타입메서드 재정의
- override func sayhello() > final 키워드를 사용한 메서드나 프로퍼티 재정의
- oveeride class func finalClassMethod() > final class를 사용한 타입메서드 재정의
let zehye: Person = Person()
let hana: Student = Student()
zehye.name = "zehye"
hana.name = "hana"
hana.major = "Swift"
zehye.selfIntroduce() // 저는 zehye입니다.
hana.selfIntroduce() // 저는 hana이고, 전공은 Swift입니다.
Person.classMethod // type method - class
Person.typeMethod() // type method - ststic
Person.finalClassMethod() // type method - final class
Student.classMethod() // overriden type method - class
Student.typeMethod() // type method - ststic
Student.finalClassMethod() // type method - final class