swift 5 문법
[swift] 9. 상속 및 다운캐스팅
jake-kim
2020. 3. 28. 18:47
1. 특성
- 단일 상속만 지원
※ protocol은 다중 구현 가능
|
1
2
3
4
5
6
7
8
|
import UIKit
class C1{
}
class C2: C1, UIContentContainer, UIAppearanceContainer{ // 다중 구현한 protocol과 단일 상속한 C1구별
}
|
2. 오버라이딩
- override키워드 붙임
- 메서드 뿐만 아니라 연산프로퍼티 변수 또한 오버라이딩 가능
- 수정 할 수 있는 변수로 하려면 역시, set키워드 넣을 것
- didSet, willSet이용 가능
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
import UIKit
class Machine{
var name: String = ""
var age: Int {
return 10
}
final var hi: Int = 1 // cannot override in subclass
}
class Car: Machine {
override var name: String { // faild - name is only read
return "car"
}
override var age: Int{ // success
return 120
}
}
|
|
- 초기화 구문의 오버라이딩 : 서브클래스에서 수퍼클래스의 init을 super로 초기화해야함
※ "Initializer Delegation" : 단, 기본초기화 구문 init() 혹은 생략 되어 있으면 서브클래스 init에서 super.init으로 수퍼클래스 init을 연속적으로 실행해 주어야함
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
import UIKit
class A{
var value: Int
init(input: Int){
self.value = input
}
}
class B:A{
override init(input: Int){ // 매개변수 이름도 수퍼클래스와 동일해야함
}
}
let b: B = B(input: 123)
|
3. 타입 캐스팅
- 타입 캐스팅이 필요한 이유 : 서브 클래스는 자기 자신의 타입이면서도 동시에 수퍼 클래스의 타입이기도 함
상위클래스 타입으로 서브클래스들의 인스턴스를 받아도, 캐스팅하면 서브클래스 프로퍼티 이용가능
|
1
2
3
|
|
- 연산자 타입 확인 방법 : 왼쪽 인스턴스, 오른쪽 타입
|
1
2
3
|
Lee() is Lee // true
Lee() is Person // true
Person is Lee // false
|
- 다운캐스팅 : 선언은 수퍼클래스, 인스턴스는 서브클래스 형태 일 때, 두 가지 방법으로 캐스팅
다운캐스팅에서 오류가 발생하면 nil을 반환하므로 ?와!관련된 캐스팅만 존재
as?(결과는 옵셔널 타입), as!(결과는 일반 타입) 두 가지 방법 존재 (업 캐스팅은 as만 존재)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
import UIKit
class A{
}
class B:A{
var name: String = "b"
}
let b: A = B()
b.name // error
if let bb = b as? B {
bb.name // success
}
|
4. AnyObject, Any
- AnyObject는 모든 클래스 타입의 수퍼클래스
- Any는 클래쓰 뿐만이 아닌 다른 자료형도 해당