[Go] 타입캐스팅
Go에서 타입캐스팅을 수행하는 방법을 정리해본다.
기본 타입의 캐스팅
정수나 실수, 문자열 등의 기본 타입들을 캐스팅할때는 전용 키워드 함수를 통해서 캐스팅을 수행해야 한다.
별거없다. 매우 C스럽다.
업캐스팅
Go에서 제공하는 또 하나의 캐스팅은 인터페이스 기반의 업캐스팅과 다운캐스팅이다.
업캐스팅은 보통 하위타입이 그 상위 타입, 그러니까 인터페이스 타입으로 변환되는 것을 말한다.
예를 들어 다음과 같이 인터페이스가 있고, 그 구현체가 있다면

아래와 같은 식으로 자동변환될 수 있다.
참조를 반환해서 인터페이스에 구겨넣으면 된다.
그럼 인터페이스 기반으로 박싱돼서 데이터가 관리된다.
다운캐스팅
type assertion이라고도 부른다.
업캐스팅은 상위타입이란게 보장이 되니까 안전한데, 다운캐스팅은 그렇지가 않다. 뭐가 들어있는지를 런타임에야 알 수 있는 것이기 때문이다.
일단 다운캐스팅 자체는 값.(타입)의 형태로 수행할 수 있다.
실제로 저 타입이 맞는 경우에는 잘 동작할 것이다.
하지만


타입이 맞지 않다면 패닉이 발생한다.
이런걸 방지하려면 타입 가드를 걸어야 하는데, 이런식이다.
표현식은 같은데 튜플을 받느냐 마느냐로 동작이 달라진다. 이게 뭐지?
아무튼 이렇게 하면 패닉이 나지 않고, 두번째 튜플 값으로 타입 캐스팅 성공여부를 검증할 수 있다.