-
Swift - 타입 캐스팅개발 (dev)/iOS 2023. 11. 22. 23:27
Swift에서 타입 캐스팅이란 인스턴스의 타입을 확인하거나 변경하는 프로세스를 의미한다.
타입캐스팅은 as 연산자를 사용하여 해줄수 있다.
class Animal { var species: String = "Animal" } class Dog: Animal { var name: String = "dog1" }
두개의 class가 있다고 해보자,
Dog 클래스는 Animal 클래스를 상속한 클래스이다.
let animal: Animal = Dog()
이와같이 타입은 Animal로 작성하고 인스턴스는 Dog 클래스로 만들어 주면 메모리의 힙 공간에는 Dog 클래스를 위한 인스턴스가 생성되게 된다. 즉, species와 name 저장 속성을 위한 메모리 공간을 따로 만들어 주는 것이다. 이상황에서는 타입을 Dog가 아닌 Animal로 정해주었기 때문에 species 저장 속성에만 접근할 수 있다.
if let a = animal as? Dog { print(a.species) // "Animal" print(a.name) // "dog1" } else { print("nil") }
그럴때 필요한것이 as연산자이다. as연산자를 사용하면 타입을 animal에서 Dog로 변환시킬 수 있다. 이를 다운캐스팅 이라고 한다.
다운캐스팅에는 as? 연산자와 as! 연산자를 사용할 수 있다.
as? 연산자: 성공시에 Optional타입 리턴, 실패시에 nil 리턴
as! 연산자: 성공시에 Optional을 언래핑한 타입 리턴, 실패시에 런타임 오류
let dog: Dog = Dog() let animal1 = dog as Animal
이와같이 dog인스턴스를 Animal 인스턴스로 바꾸어 주는것은 하위의 클래스에서 상위 클래스로 올라가는 케이스이기 때문에 업캐스팅 이라고 한다. 업캐스팅은 항상 성공하기 때문에 as 연산자를 사용한다.
지금까지 타입캐스팅 개념에 대해서 알아보았다. 개념도 중요하지만, 메모리 구조를 잘 생각해 보면서 이해하는 것이 더 좋을 것 같다
'개발 (dev) > iOS' 카테고리의 다른 글
Swift - UITraitCollection에 대해서 알아보자 (0) 2024.01.21 Swift - ARC (Automatic Reference Counting) (0) 2023.12.01 Swift - 네임드 튜플 정의하기 (0) 2023.10.31