타입 캐스팅 (is, as)

조재민·2023년 8월 25일
0
post-thumbnail

타입 캐스팅 ( Type Casting )

타입 캐스팅 (Type Casting)

  • 인스턴스의 "타입" 을 확인하거나, 해당 인스턴스를 슈퍼 클래스나 하위 클래스로 취급하는 방법
  • "is" 또는 "as" 연산자로 구현
  • 타입이 프로토콜에 적합한지 여부도 확인 가능

is ( Checking Type )

표현식 is Type
  • 타입을 체크하는 연산자, 반환 값은 Bool
  • 런타임 시점에 실제 체크가 이루어짐
  • 표현식이 타입과 동일하거나 타입의 서브클래스인 경우 → True
    이 외의 경우 → False

<예제 코드1>

let char: Character = "A"
 
char is Character       // true
char is String          // false
 
 
let bool: Bool = true
 
bool is Bool            // true
bool is Character       // false
 

<예제 코드2>

class Human { }
class Teacher: Human { }
 
let teacher: Teacher = .init()
teacher is Teacher      // true
teacher is Human        // true

Human 클래스를 Teacher 이란 클래스가 "상속" 받을 경우, teacher 이라는 인스턴스는 Human 클래스의 서브 클래스이기 때문에 Human으로 타입 체크를 해도 true가 됨

class Human {
    let name: String
    init(name: String) {
        self.name = name
    }
}
class Teacher: Human { }
class Student: Human { }
 
 
let people: [Human] = [
    Teacher.init(name: "김선생"),
    Student.init(name: "박제자"),
    Student.init(name: "유제자")
]

다운캐스팅 as?, as!

  • as? → 다운캐스팅을 시도하고 성공하면 옵셔널 값을 반환함. 실패하면 nil 을 반환함
  • as! → 강제 다운캐스팅을 수행, 실패하면 런타임 오류를 발생
class Animal { }
class Dog: Animal { }
class Cat: Animal { }

if let dog = pet as? Dog {
    print("Successfully casted to Dog.")
} else {
    print("Failed to cast to Dog.")
}
profile
“누군가는 너를 사랑하고 있다.”

0개의 댓글

관련 채용 정보