[ swift - 타입 캐스팅 ]

Yr Yr·2023년 12월 5일

TIL

목록 보기
1/39

타입 캐스팅이란?

=> 변수나 객체의 타입을 다른 타입으로 변환하는 프로세스

  • is
    타입을 체크하는 연산자로 비교결과로 bool타입을 반환

    let char: Character = "A"
    
    print(char is Character) // true
    print(char is String) // false
  • as
    컴파일 단계에서 캐스팅이 실행되므로 타입 캐스팅이 성공할 경우에만 사용할 수 있다.
    캐스팅에 실패할 경우 에러가 발생한다.
    캐스팅하려는 타입이 같은 타입이거나 수퍼클래스 타입이라는 것을 알 때 사용한다.

  • as?
    런타임에 캐스팅이 실행된다. 성공하면 옵셔널 타입의 인스턴스를 반환하고 실패하면 nil을 반환한다. 실패 가능성이 있다면 as?를 사용하는 것이 좋다.

  • as!
    런타임에 특정타입으로 강제 캐스팅한다. 강제 타입 캐스팅에 실패할 경우 에러가 발생할 수 있고 성공한 경우 인스턴스를 반환한다.(옵셔널 아님)

    class Person {
    	var id = 0
        var name = "name"
    }
    
    class Worker: Person {
    	// id
        // name
        var salary = 300
    }
    
    class Programmer: Worker {
    	// id
        // name
        // salary
        var lang = "Swift"
    }
    
    // 업캐스팅
    let person1 = Person()
    let worker1 = Worker()
    let programmer1 = Programmer()
    
    let personList = [person1,worker1] // Person타입으로 인식. 즉 업캐스팅되었음
    personList[1].name
    personList[1].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: 타입변환 실패 시 오류

0개의 댓글