Type Casting (as, as?, as!)

KKANG·2021년 8월 17일
0
post-thumbnail

Type Casting

Swift는 Type Casting을 위한 as 연산자를 제공한다.
Type Casting 방법에는 하위클래스를 상위클래스로 변환하는 UpCast와 상위클래스를 하위클래스로 변환하는 DownCast가 있다.

Upcasting

하위클래스 변수를 상속받은 상위클래스 타입으로 바꿔주고싶을 때 업캐스팅을 수행할 수 있다.

as

하위클래스는 상위클래스를 상속받아 모든 속성을 그대로 포함하기 때문에 업캐스트는 항상 성공한다.
이렇게 성공이 보장된 타입캐스팅의 경우 연산자 as를 사용한다.

DownCasting

반대로 상위클래스 변수를 하위클래스 타입으로 사용하고 싶을 때는 다운캐스팅을 해줘야한다.
다운캐스팅이 무조건 성공하는 경우는 하위클래스가 상위클래스로 변환되었다가 다시 하위클래스 타입으로 변환되는 경우이고 이 외의 경우 실패할 가능성이 높은 연산이다.
때문에 Swift는 다운캐스팅을 위한 두가지 방법을 제공한다.

as?

Conditional Downcast

as? 연산은 다운캐스팅이 성공할지 확신할 수 없을 때 사용한다.
다운캐스팅이 될 수 있으면 해주고 다운캐스팅 된 optional 값을 반환한다.
연산이 실패하면 nil이 반환되므로 적절한 Optional Binding이 필요하다.

if let newclass = anyClass as? anyClass {

}
else {}

as!

Forced Downcast

as! 연산은 다운캐스팅이 성공한다고 확신할 때 사용해야한다.
강제로 다운캐스팅을 수행하기 때문에 컴파일 시에는 에러를 발견할 수 없다.
그 말은 곧 런타임시에 에러가 발생할 수 있다는 것이므로 안전하지 않아 as!보다 as? 사용이 권장된다.

let newclass = SuperClass as! SubClass
profile
재밌게 잘하자

0개의 댓글