타입 캐스팅(Type Casting)은 프로그래밍에서 하나의 데이터 타입을 다른 데이터 타입으로 변환하는 과정을 말합니다.
Swift에서 타입 캐스팅은 주로 클래스 계층 구조에서 구조에서 인스턴스의 타입을 확인하거나 상위 클래스 또는 하위 클래스로 변환할 떄 사용 됩니다.
Swift에서의 타입 캐스팅
Swift는 두가지 기본 타입 캐스팅 연산자를 제공합니다.
1. ' is' 연산자
2. 'as' 연산자
'is' 연산자
'is' 연산자는 인스턴스가 특정 타입의 하위 클래스인지 확인하는 데 사용됩니다. 이 연산자는 Boolean 값을 반환합니다.
class Animal {}
class Dog: Animal {}
let animal: Animal = Dog()
if animal is Dog {
print("animal is a Dog")
}
'as' 연산자
'as' 연산자는 인스턴스를 다른 타입으로 캐스팅하는 데 사용됩니다. 이 연산자는 세 가지 형태로 사용됩니다.
1. 조건부 캐스팅 (Optional)('as?')
2. 강제 캐스팅 ('as!')
3.업캐스팅 ('as')
조건부 캐스팅('as?')
조건부 캐스팅은 실패할 수 있는 타입 캐스팅입니다. 캐스팅에 실패하면 'nil'을 반환합니다.
이를 통해 안전하게 캐스팅을 시도할 수 있습니다.
let animal: Animal = Dog()
if let dog = animal as? Dog {
print("animal was successfully cast to Dog")
} else {
print("casting failed")
}
강제 캐스팅 ('as!')
강제 캐스팅은 캐스팅이 항상 성공할 것으로 확신할 떄 사용합니다. 만약 캐스팅이 실패하면 런타임 에러가 발생합니다.
let animal: Animal = Dog()
let dog = animal as! Dog
print("animal was cast to Dog")
업캐스팅('as')
업캐스팅은 서브클래스의 인스턴스를 슈퍼클래스 타입으로 변환할 떄 사용됩니다. 이는 항상 성공합니다.
class Animal {}
class Dog: Animal {}
let dog = Dog()
let animal: Animal = dog // 업캐스팅
예제: 타입 캐스팅 사용하기
아래는 타입 캐스팅을 활용한 예제입니다:
class Animal {
var name: String
init(name: String) {
self.name = name
}
}
class Dog: Animal {
func bark() {
print("Woof!")
}
}
class Cat: Animal {
func meow() {
print("Meow!")
}
}
let animals: [Animal] = [Dog(name: "Buddy"), Cat(name: "Mittens"), Dog(name: "Rex"), Cat(name: "Whiskers")]
for animal in animals {
if let dog = animal as? Dog {
print("\(dog.name) is a Dog")
dog.bark()
} else if let cat = animal as? Cat {
print("\(cat.name) is a Cat")
cat.meow()
}
}
위의 예제에서는 'Animal' 클래스를 상속받는 'Dog' 와 'Cat' 클래스를 정의하고, 타입 캐스팅을 사용하여 배열의 각 요소가 'Dog' 인지
'Cat' 인지 확인하고 적절한 메서드를 호출하고 있습니다.
'Swift '문법'' 카테고리의 다른 글
Model (0) | 2024.08.09 |
---|---|
Extension (0) | 2024.08.08 |
프로퍼티 옵저버 (0) | 2024.08.06 |
ARC와 메모리 누수 (0) | 2024.08.02 |
접근제한자 (0) | 2024.08.01 |