C++에서 캐스팅을 왜 절약해야 하는지 알아가기 전에 우선 알아야 할것은 C++ 스타일식 캐스팅 변환을 왜 해야 하는지 부터 알아야 한다.


기존의 C스타일의 캐스팅은 (T)표현식, T(표현식), 이렇게 사용 했었지만, 이것을 C++에선 '구형 스타일 캐스트' 라고 불린다.


C++에서는 새로운 캐스팅 변환은, const_cast<T>(표현식), dynamic_cast<T>(표현식), reinterpret_cast<T>(표현식), static_cast<T>(표현식) 등이 있다. 각각의 중요한점만 말한다면,


const_cast 는 객체에 걸려있는 상수성을 없애는데 사용 한다.
dynamic_cast 는 상속 계통으로의 캐스팅을 '확인'해 가면서 캐스팅을 해주며, 이것으로 인항 많은 비용을 지불하는 캐스팅 연산자이다.
reinterpret_cast 는 포인터를 int로 바꾸거나 등 하부 수준 코드에서 사용 가능하지만, 적용 결과가 구현환경에 의존적이라고 한다.
static_cast int --> double 로 또는 void*를 일반 타입 포인터로, 기본 클래스의 포인터를 파생 클래스의 포인터로 바꾸는 용도로 사용 된다.


.. 자.. C++ 스타일의 캐스팅 변환을 알아 보았지만, 왜 이것을 써야 하는지 아리송 할수가 있을것이다. 그 이유를 찾아 본다면,


첫째, 코드를 읽을 때 알아보기가 쉽다.(grep등이 쉽다는 점)
둘째, 캐스트 사용 목적을 좀 더 좁혀서 지정하기 때문에, 컴파일 타임에서 에러를 유도 할수 있다.

둘째 이유로 인해, 컴파일 타임에 캐스팅이 일어난다고 생각 하겠지만, 런타임중 캐스팅 변환이 일어난다. 또한 캐스팅 변환은 많은 벌레를 키우는 더러운 환경을 조성하게 되므로, 되도록 사용하지 않다고 필자는 타일르고 있다..(쓰지마~~)


캐스팅에 대해서 긴 이야기가 있지만, 캐스팅 변환은 새로운 임시 객체를 만든다는 것, dynamic_cast의 경우 많은 비용을 지불해야 한다는것(strcmp로 '인' 하기 때문이기도 하다) 을 알면 좋을듯 싶다.


이것만은 잊지 말자!
1. 다른 방법이 가능하다면 캐스팅은 피하라.
2. 캐스팅이 어쩔수 없이 필요하다면, 함수안에 숨켜라.
3. 구형 새트일 캐스팅을 쓰려거든 C++ 스타일을 사용 하라





  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 라이프코리아트위터 공유하기
  • shared
  • 카카오스토리 공유하기