본문 바로가기

 𝗔𝗣𝗣𝗟𝗘/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
«   2024/12   »
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 31