iOS

[iOS] Type Casting 알아보기

스벅 보안관 2024. 6. 17. 09:32

안녕하세요 스벅보안관입니다.

오늘은 Swift에서 자주 등장하는 타입 캐스팅(Type Casting) 에 대해 알아보려고 합니다. Swift를 사용하다 보면, 객체 간의 타입을 변환해야 하는 경우가 종종 있는데요, 이때 사용하는 것이 바로 타입 캐스팅입니다.

타입 캐스팅(Type Casting)이란?

타입 캐스팅은 인스턴스가 특정 클래스, 구조체, 열거형에 속하는지 확인하거나, 해당 타입으로 변환하는 것을 의미합니다. Swift는 타입 안전성을 보장하기 때문에 잘못된 타입 변환은 컴파일 시점 또는 런타임 시점에 오류로 처리됩니다.

 

Swift에서의 타입 캐스팅은 주로 두 가지 방식으로 이루어집니다.

  1. is 연산자: 객체가 특정 타입에 속하는지 확인합니다.
  2. as 연산자: 객체를 특정 타입으로 변환합니다.

이 두 연산자를 어떻게 사용하는지 하나씩 살펴보겠습니다.

is 연산자

is 연산자는 객체가 특정 타입에 속하는지 확인하는 데 사용됩니다. 이 연산자를 사용하면 true 또는 false 값을 반환하여 해당 객체가 주어진 타입과 일치하는지 검사할 수 있습니다.

class Animal {}
class Dog: Animal {}

let myPet: Animal = Dog()

if myPet is Dog {
    print("myPet은 Dog 타입입니다.")
} else {
    print("myPet은 Dog 타입이 아닙니다.")
}

 

위 코드에서 myPet은 Dog 타입의 인스턴스지만 Animal 타입으로 선언되었습니다. is 연산자를 사용하여 이 인스턴스가 실제로 Dog 타입인지 확인할 수 있습니다.

 

as 연산자

 

as 연산자는 타입을 변환하는 데 사용됩니다. Swift에서는 안전한 타입 변환을 위해 두 가지 방식의 as 연산자를 제공합니다.

  1. as? (옵셔널 캐스팅): 타입 변환에 실패할 수 있으므로 변환된 값이 옵셔널로 반환됩니다.
  2. as! (강제 캐스팅): 타입 변환이 반드시 성공한다고 가정하고, 변환이 실패할 경우 런타임 에러를 발생시킵니다.

 

1. as? 사용 예시

let animal: Animal = Dog()

if let dog = animal as? Dog {
    print("변환 성공: \(dog)")
} else {
    print("변환 실패")
}

 

as? 연산자를 사용하면 안전하게 타입 캐스팅을 시도할 수 있으며, 변환에 성공하면 옵셔널이 아닌 타입으로 반환됩니다.

 

2. as! 사용 예시

let animal: Animal = Dog()
let dog = animal as! Dog // 변환이 실패하면 크래시 발생
print("변환 성공: \(dog)")

 

강제 캐스팅(as!)은 변환이 반드시 성공할 것이라는 확신이 있을 때 사용합니다. 만약 변환에 실패할 경우 프로그램이 런타임 에러와 함께 종료됩니다.

 

 

 

결론

타입 캐스팅은 Swift에서 객체 간의 관계를 명확히 이해하고, 적재적소에 맞는 변환을 사용해야 하는 중요한 개념인 것 같습니다..

 

"내가 변환하고자 하는 이 타입, 정말 안전한가?" 이 질문 하나만 항상 염두에 두며 사용해야할거같습니다.

 

그럼, 오늘도 안전한 타입 캐스팅 하시길! ㅋㅋㅎ