타입 캐스팅이란?
변수나 객체의 타입을 다른 타입으로 변환하는 프로세스
01. is
- 타입을 체크하는 연산자
- 비교 결과를 bool 타입을 반환한다(타입 체킹)
let char: Character = "A"
print(char is Character)
// 출력값: true
print(char is String)
// 출력값: false
let bool: Bool = true
print(bool is Bool)
// 출력값: true
print(bool is Character)
// 출력값: false
02. as, as!, as?
- 인스턴스의 "타입"을 확인 하거나,
- 해당 인스턴스를 슈퍼 클래스(부모 클래스)나 하위 클래스(자식 클래스)로 취급하는 방법
as |
|
as? |
|
as! |
|
예제
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"
}
업 캐스팅
let person1 = Person()
let worker1 = Worker()
let programmer1 = Programmer()
let personList = [person1, worker1, programmer1]
//위 배열에서 [person1, worker1, programmer1] 각각의 타입을 선언하지 않았지만
//Person 타입으로 인식하여 한 배열에 담김 -> 즉 업캐스팅이 되었음
personList[1].name
//name은 부모 Class인 Person타입의 인스턴스이기 때문에 접근 가능
personList[1].salary
//Person에 존재하지 않는 인스턴스인 salary에 접근하지 못함
let worker2 = Worker()
worker2.salary
//Worker 타입으로 타입추론 했기 때문에 salary에 접근 가능
let workerPerson = worker2 as Person
workerPerson.salary
//업캐스팅으로 worker2를 Person 타입으로 보고 있기 때문에 salary에 접근하지 못함
다운캐스팅 - 어려움 더 찾아봐야함..
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 > iOS 문법 노트' 카테고리의 다른 글
[🍎 Swift 문법] 제어문 전환 명령어 (0) | 2024.06.27 |
---|---|
[🍎 Swift 문법] if let & guard let (0) | 2024.06.27 |
[🍎 Swift 문법] 프로퍼티 옵저버 (0) | 2024.06.11 |
[🍎 Swift 문법] 클래스와 인스턴스 (0) | 2024.06.07 |
[🍎 Swift 문법] 옵셔널(더 찾아보고 추가하기) (0) | 2024.06.05 |