항목 39. 계층도의 아래쪽 클래스로 다운캐스트 하지 않도록 한다.

캐스트(cast)란? 사전적 의미 : http://endic.naver.com/endic.nhn?docid=182460&rd=s
형 변환을 말하며,
C 스타일은 (원하는 형) 으로 쓴다. 예) int a = 3; (double)a .....; 식
C++ 스타일 4종 캐스트 변환이 있으며, 기존 C를 보다 구체적으로 분류하여 가독성과 안정성을 고려한방식이다.
static_cast, dynamic_cast, const_cast, 절대권력자 reinterpret_cast 사용법은 인터넷에 널려 있다.

그렇다면 다운 캐스트(down cast)란?
부모클래스를 가리키는 포인터를 자식을 가리키는 포인터로 바꾸는것 을 다운 캐스트라 한다.
(부모에서 자식으로 포인터가 내려갔으니)

이유
1. 타입 변환은 이브의 사과에 해당한다. (필자 표현력 쥑이네!)
2. 코드 이해가 힘들어 지고, 잘못된 연산을 할 위험이 많이 발생된다.
3. 해당 포인터가 무엇을 가리키는 포인터인지 파악하고.. 분석하면서 분( 자신의 뺨을 때려라! 찰싹!)
- 이런 방법은, C++에서 사용하지 않으며, 사용할수도 없다!(가능하지만 사용할수도 없는게 맞는 표현이다)
- (번역을 잘하는건지 재미있게 읽힌다.)

해결 방법
1. 되도력 쓰지마!
2. 가상함수를 이용해!
- 가상 함수 사용시 유의점은 .. 전 항목에서 설명되어졌다.
3. 부득이하게 쓸때는 dynamic_cast 로 확인해 보며 사용해라.
(3번의 방법은 2번에 비해 아주 열등한 방법이고, 반드시 .. 방법이 없을때만 사용해야 한다, dynamic_cast로 포인터의 시작점을 찾을수 있다고 한다.)


개인적인 말
1. C++ 스타일일 캐스트를 알고 부터, C++ 스타일만 쓴다. 그 결과 확실히 가독성 및 안정성이 확보되었다.
2. reinterpret_cast 의 경우 스펠링을 외우지 않는다. .. 안쓸꺼니까!(라고 했지만 이미 외웠다. 부득이할때만 쓰자.)
3. .. .. 사실 캐스트는 주의가 필요한 연산잗,.. 그걸 보정하는 작업이 더 힘들기 때문이다.



신고
posted by 농사를 짓는 게임 프로그래머 최익필

댓글을 달아 주세요