Swift/기초 문법
상속
수줌이
2021. 2. 10. 13:13
⭐ 상속
-
Swift의 상속은 클래스, 프로토콜 등에서 가능
-
열거형, 구조체는 상속이 불가능 → 값 타입이기 때문
-
Swift는 다중상속을 지원하지 않음
1. 문법
class 이름: 상속받을 클래스 이름 {
/* 구현부 */
}
2. 사용
-
final 키워드를 사용하면 재정의(override)를 방지할 수 있습니다.
-
static 키워드를 사용해 타입 메서드를 만들면 재정의가 불가능 합니다.
-
class 키워드를 사용해 타입 메서드를 만들면 재정의가 가능합니다.
-
class 앞에 final을 붙이면 static 키워드를 사용한것과 동일하게 동작합니다.
-
override 키워드를 사용해 부모 클래스의 메서드를 재정의 할 수 있습니다.
class Person {
var name: String = " "
func selfIntroduce() {
print("저는 \(name)입니다")
}
// final 키워드를 사용하여 자식 클래스에서의 재정의를 방지할 수 있음
final func sayHello() {
print("hello")
}
// 타입 메서드
// 재정의 불가 타입 메서드 - static
static func typeMethod() {
print("type method - static")
}
// 재정의 가능 타입 메서드 - class
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 name: String = "" //error 저장프로퍼티는 재정의 불가. 그냥 사용할 것!
var major: String = ""
override func selfIntroduce() {
print("저는 \(name)이고, 전공은 \(major)입니다") // 상속받아서 selfIntroduce() 재정의
super.selfIntroduce() // 부모 클래스의 selfIntroduce() 호출
}
// class 메서드 재정의 가능
override class func classMethod() {
print("overriden type method - class")
}
// static을 사용한 타입 메서드는 재정의 할 수 없다
// override static func typeMethod() { }
// final 키워드를 사용한 메서드, 프로퍼티는 재정의 할 수 없습니다
// override func sayHello() { }
// override class func finalClassMethod() { }
}
// 구동 확인
let yagom: Person = Person()
let hana: Student = Student()
yagom.name = "yagom"
hana.name = "hana"
hana.major = "Swift"
yagom.selfIntroduce()
// 저는 yagom입니다
hana.selfIntroduce()
// 저는 hana이고, 전공은 Swift입니다
Person.classMethod()
// type method - class
Person.typeMethod()
// type method - final class
Person.finalClassMethod()
// type method - final class
Student.classMethod()
// overriden type method - class
Student.typeMethod()
// type method - static
Student.finalClassMethod()
// type method - final class
이 글은 Boostcourse에서 배운 내용을 정리하여 작성하였습니다.