타입 캐스팅(Type Casting)
💡 타입 캐스팅(Type Casting)
- 인스턴스의 타입을 확인하거나 슈퍼 클래스나 하위 클래스로 취급하는 방법
- 타입이 프로토콜에 적합한지에 대한 여부 확인
Type Check(인스턴스의 타입 확인)
- is 키워드를 사용하여 인스턴스가 특정 클래스의 인스턴스인지, 또는 특정 프로토콜을 준수하는지 확인
- 선언한 상수 / 변수가 내가 원하는 타입인지 확인 할 때 사용
- 반환값은 true 또는 false
→ true: 표현식이 Type과 동일하거나, 표현식이 Type의 서브 클래스인 경우
→ false: 그 이외의 경우
예시
let char: Character = "A"
char is Character // true
char is String // false
let bool: Bool = true
bool is Bool // true
bool is Character // false
Downcasting(다운캐스팅)
- 슈퍼클래스 타입의 인스턴스를 서브클래스 타입으로 캐스팅하는 것
- as? 또는 as! 키워드를 사용하여 다운캐스팅 수행
→ as? : 옵셔널 타입을 반환하며, 다운캐스팅에 실패할 경우 nil 반환
→ as! : 강제 다운캐스팅을 수행하며, 다운캐스팅에 실패할 경우 런타임 오류 발생
- 상속 관계인 업 캐스팅(Upcasting)과 다운 캐스팅(Downcasting)에서 사용
- Any와 AnyObject 타입을 사용할 경우, 상속 관계가 아니어도 예외적으로 사용할 수 있음
예시
class Person {
var id = 0
var name = "name"
var email = "hgk@gmail.com"
}
class Worker: Person {
// id
// name
// email
var salary = 300
}
class Programmer: Worker {
// id
// name
// email
// salary
var lang = "Swift"
}
// 업캐스팅 - as
let person1 = Person()
let worker1 = Worker()
let programmer1 = Programmer()
let personList = [person1, worker1, programmer1] // 타입을 선언하지 않았지만 Person 타입으로 인식 -> 즉 업캐스팅이 되었음
personList[1].name
//personList[1].salary // Person 타입으로 보고 있기 때문에 salary에 접근하지 못함
let worker2 = Worker()
worker2.salary
let workerPerson = worker2 as Person
//workerPerson.salary // Person 타입으로 보고 있기 때문에 salary에 접근하지 못함
// 다운캐스팅 - as? / as!
// as?
let pro = programmer1 as? Programmer // 타입 변환이 될 수도 있고 안될 수도 있기 때문에 옵셔널을 리턴
if let person2 = programmer1 as? Programmer {
person2.lang
}
if let person3 = worker1 as? Programmer {
person3.lang
}
// as!
let pro2 = worker2 as! Programmer // Error : 타입 변환 실패시 오류
' 𝗔𝗣𝗣𝗟𝗘 > SWIFT : GRAMMAR' 카테고리의 다른 글
Swift 기초 문법 - 클로저(Closure) (0) | 2024.03.13 |
---|---|
Swift 기초 문법 - 접근 제한자(access control) (2) | 2024.03.12 |
Swift 기초 문법 - 프로퍼티 옵저버 (0) | 2024.03.12 |
Swift 기초 문법 - 초기화(Initialization) (0) | 2024.03.11 |
Swift 기초 문법 - 상속(Inheritance) (0) | 2024.03.11 |