Swift 5 : 타입 캐스팅(Type Casting)

버들비·2020년 7월 14일
0

Swift

목록 보기
2/10

타입 캐스팅(type casting)

메서드나 함수가 반환하는 값이 불확실할 경우, 컴파일러가 에러를 띄울때가 있다. 이럴때 as 키워드를 통해 작성자가 의도한 값의 타입을 컴파일러에게 알려줘야 한다. 이것을 타입 캐스팅(type casting, 형 변환) 이라고 한다.

다음은 object(forkey:)라는 메서드가 반환하는 값이 String 타입이라고 지정해주는 코드이다.

let myValue = record.object(forkey: "comment") as! String

업캐스팅과 다운캐스팅

업캐스팅은 특정 클래스이 객체가 상위 클래스들 중의 하나로 변형되는 것.
업캐스팅은 as 키워드를 사용한다. 하위 클래스는 상위 클래스의 부분집합이므로, 업캐스팅은 언제나 성공한다. 따라서 보장된 변환(guaranteed conversion)이라고도 한다.

다운캐스팅은 어떤 클래스에서 다른 클래스로 만드는 변환이 일어날 때 발생한다. 다운캐스팅은 보통 해당 클래스의 하위 클래스로 변환하게 되며, as! 키워드로 수행된다.
해당 클래스의 하위 클래스는 여러개 일수 있으므로, 다운캐스팅은 실패할 수도 있다. 컴파일러는 발견하지 못한 에러가 런타임에서 발생할 수 있다. 다운캐스팅은 강제 변환(forced conversion)이라고도 한다.
안정성을 위해 as! 를 사용하기 보단 as? 를 이용한 옵셔널 바인딩을 사용한다. 다운 캐스팅이 성공적으로 수행된다면 지정한 타입의 옵셔널 값이 반환될 것이며, 다운 캐스팅에 오류가 발생한다면 옵셔널 값은 nil 이 될 것이다.

if let myTextView = myScrollView as? UITextView {
	print("Type cast to UITextView succeeded")
} else {
	print("Type cast to UITextView failed")
}

is 키워드를 사용하여 타입 검사를 할 수도 있다. 다음은 해당 객체가 MyClass 라는 이름의 클래스의 인스턴스인지 검사하는 코드다.

if myObject is MyClass {
	print("myObject is instance of MyClass")
}

reference

핵심만 골라 배우는 SwiftUI 기반의 iOS 프로그래밍 / 닐 스미스 지음 / 황반석 옮김 / 제이펍 출판

0개의 댓글