Swift Type Casting

is 연산자

is 연산자는 특정 인스턴스가 지정된 타입인지 확인하는데 사용한다.
만약 인스턴스가 지정된 타입의 인스턴스라면 'true' 를 반환하고, 그렇지 않으면 'false' 를 반환합니다.

class Animal {

}

class Dog: Animal {

}

let animal = Animal()
let dog = Dog()

print(animal is Animal)  // 출력값 : true
print(animal is Dog)  // 출력값 : false     Dog는 Animal을 상속받고 있으므로 is 관계가 될 수 없다.
print(dog is Animal)  // 출력값 : true
print(dog is Dog)  // 출력값 : true

as 연산자

as 연산자는 인스턴스의 타입을 다른 타입으로 변환하는데 사용된다.

  • Upcasting :서브 클래스인 인스턴스를 슈퍼 클래스 타입으로 변환하는 것 이 때는 캐스팅이 안전하므로 강제 변환할 필요 없다.
    서브 클래스는 슈퍼클래스의 모든 속성과 메서드를 상속받기 때문에 슈퍼클래스 타입으로 변환해도 괜찮다

  • Downcasting : 슈퍼클래스 인스턴스를 서브 클래스 타입으로 변환하는 것 이 때는 안전하지 않으므로 옵셔널 타입으로 변환하는 방법을 추천 (강제 캐스팅은 비추천)
    슈퍼클래스의 인스턴스가 실제로 서브 클래스 인스턴스와 다를 수 있기 때문에 안전하지 않음

class Animal {
    // 슈퍼 클래스
}

class Dog: Animal {
    // 서브 클래스
}

let dog = Dog()
let animal = dog as Animal  // Upcasting 출력값 : Dog

let newDog = animal as? Dog // Downcasting 옵셔널 사용하여 출력

if let anotherDog = animal as? Dog {    // Downcasting 옵셔널 바인딩 하여 출력 (이 방식을 가장 많이 사용)
    print("이건 개다")
} else {
    print("이건 개가 아니다")
}

'◽️ Programming > Swift 문법' 카테고리의 다른 글

Swift Extention  (0) 2024.03.02
Swift Initializer  (0) 2024.03.02
Swift Class 상속 , overriding  (0) 2024.03.02
Swift Instance  (0) 2024.03.01
Swift 계산 속성  (0) 2024.03.01