Open ggjae opened 3 years ago
그래서, 강제 캐스팅을 사용하는것보다 static_cast, dynamic_cast와 같은 캐스트 메소드를 사용했을 때의 이점이 뭔데?
강제 캐스팅을 사용하면 런타임시에 segmentation fault, runtime error 등 예기치 못한 에러의 발생을 야기할 수 있는데 컴파일러딴에서 오류를 잡아버리면 추후 문제가 될 가능성을 줄여주는 이점
다운캐스트에서는 안전하지 못한 것은 기억해야해. Liskov Substitution Principle도 기억하면 좋겠다. :)
C의 타입 캐스팅 (묵시적, 암시적 형 변환)
ex)
데이터의 손실이 일어날 수 있기 때문에 문제가 될 수 있다.
일반적으로 아래의 캐스트방법들은 함수<변환할타입>(변환대상)으로 진행된다.
static_cast
컴파일시에 논리적으로 변경 가능한 경우에 변경을 허용한다. static_cast<변환할타입>(변환대상)으로 강제 캐스팅이 아닌 캐스트 연산자를 이용하여 캐스팅이 가능하다. 업캐스트, 다운캐스트 다 가능
ex) static_cast(3);
static_cast는 논리상 맞지 않는 변환을 막아주는 역할을 합니다.
문제점 : 상속관계에서의 형변환이 안전하지 못하다. (자식을 부모가 대체가능함)
dynamic_cast
dynamic_cast와 static_cast는 아예 다르다. 런타임 중 안정성 검사를 진행하고 상속관계에서의 업캐스트나 변환을 진행시켜주지만, 다른 데이터형 변환은 허용하지 않는다. 가상함수를 이용하면 다운캐스팅도 진행이 가능하다.
const_cast
어떤 값을 const나 volatile로, 또는 그 반대로 변경하는것이 유일한 목적
const로 선언했지만 값을 바꾸어주는 경우 const_cast를 사용한다.
reinterpret_cast
저수준 프로그래밍에서 위험한 데이터형 변환을 안전하게 진행시키기 위하여 사용한다.