상속이란?
본질적으로 성격이 비슷한 타입을 새로 만들어 프로퍼티나 기능을 추가 및 변형시켜서 사용하는것
- 상속은 클래스에서만 지원하는 기능이다 (구조체는 상속 불가능)
class Person {
var id = 0
var name = "Jimin"
var phoneNumber = "010xxxxxxxx"
func doSomething() {
print("doSomething")
}
}
// Student 클래스에 Person클래스 상속
// Student클래스는 자식클래스, Person클래스는 부모클래스가 된다
class Student: Person {
// Person클래스를 상속함으로서 id, name, phoneNumber,
// doSomething()에 접근이 가능하다
var studentId = 0
func doSomething2() {
print("\(name)님의 studentId는 \(studentId)입니다")
}
}
// Student 인스턴스를 만들면 Person클래스의
// 프로퍼티와 메서드에 접근이 가능하다
var student1 = Student()
student1.name // Jimin
student1.id // 0
student1.phoneNumber // 010xxxxxxxx
student1.doSomething() // 콘솔: doSomething
student1.studentId // 0
student1.doSomething2() // 콘솔: Jimin님의 studentId는 0입니다
상속시 주의점
- 구조체는 상속이 불가능하다
class Person {
var id = 0
var name = "Jimin"
var phoneNumber = "010xxxxxxxx"
func doSomething() {
print("doSomething")
}
}
// 구조체는 상속이 불가능하다 (프로토콜 채택은 가능)
//struct AStruct: Person {
//
//}
- 스위프트는 다중상속을 지원하지 않는다
class Person {
var id = 0
var name = "Jimin"
var phoneNumber = "010xxxxxxxx"
func doSomething() {
print("doSomething")
}
}
class Student {
}
// 다중상속은 불가능하다 (단, 프로토콜 채택은 몇개를 하든 상관없다)
//class AnotherClass: Person, Student {
//}
final 클래스
- 클래스에 final 키워드를 사용하면 더이상 상속할 수 없다
class Person {
var id = 0
var name = "Jimin"
var phoneNumber = "010xxxxxxxx"
func doSomething() {
print("doSomething")
}
}
final class Student: Person { // 클래스를 더이상 상속시키고 싶지 않을땐 final키워드를 쓴다
// Person클래스를 상속함으로서 id, name, phoneNumber,
// doSomething()에 접근이 가능하다
var studentId = 0
func doSomething2() {
print("\(name)님의 studentId는 \(studentId)입니다")
}
}
//Student 클래스가 final로 설정돼있기 때문에
//더이상 Student클래스를 상속하지 못한다
//class AnotherClass: Student {
//
//}
UIKit의 상속구조
만약 UIButton을 사용할시 UIButton의 상위클래스인 UIControl, UIView, UIResponder, NSObject의 속성에 접근할수 있다
'Swift > 문법' 카테고리의 다른 글
[Swift] 상속 및 재정의(3/3) 메서드의 재정의 (0) | 2022.04.03 |
---|---|
[Swift] 상속 및 재정의(2/3) 프로퍼티의 재정의 (0) | 2022.04.03 |
[Swift] 메서드(Methods)의 종류 (0) | 2022.04.02 |
[Swift] 속성(Properties)의 종류 (0) | 2022.04.02 |
[Swift] 중첩반복문 labeled break (0) | 2022.03.20 |