본문 바로가기

 𝗔𝗣𝗣𝗟𝗘/SWIFT : GRAMMAR

Swift 기초 문법 - 타입 캐스팅(Type Casting)

 

 

 

 

타입 캐스팅(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 : 타입 변환 실패시 오류

 

 

 

 

 

 

 

참고

Recent Posts
Visits
Today
Yesterday
Archives
Calendar
«   2025/11   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30