회사에서 하는 일이 C#으로 클라이언트들의 프로그램을 개발하는 일이다 보니 학교에서 조금 배웠던 C#을 어느정도 능숙하게 다룰 수 있겠 되었습니다. 그러다 보니 꽤나 색다른 방법들도 알게 되더군요. 바로 캐스팅부분이라고 할 수 있습니다.
몇몇을 제외한 보통의 대학들이나 시중에서 처음 시작하는 언어가 대부분 C 언어이기 때문에 위와 같은 형 변환 구문을 자주 보셨을 겁니다. 하지만 () 를 자주 사용하여 형 변환을 하다보니 코드의 가독성이 떨어지는 등의 단점이 적지 않게 있죠.
그래서 C++ 에서는 캐스팅을 보다 쉽게(?) 읽기 위하여 static_cast, const_cast, reinterpret_cast, dynamic_cast 등을 사용하여 형 변환 하게 됩니다. 형식이 한 가지의 형 변환 형식에서 탈피한 여러가지 방식을 문자를 통하여 보여주고 있으므로 C방식의 형 변환 보다는 판독하기가 쉽습니다.
이렇게 언어들이 계속 사용되면서 차츰차츰 발전되어왔는데요. 그럼 C# 에서는 형 변환을 어떻게 할까요?
바로 As 를 사용한 캐스팅이 문법에 추가되었기 때문에 이를 이용하는 방법이 주로 사용되죠, 하지만 이 방법은 값 형식에는 적용되지 않으므로 그 때엔 기존의 () 를 이용한 형 변환이 사용됩니다. 그런데 그냥 코드를 보면 그다지 이익이 보이는 것 같지 않죠?
하지만 한 가지 이익은 있다고 볼 수 있습니다. () 를 이용한 형 변환을 하게 될 때는 컴파일상 코드에 있어서 많은 부분에 대해서 테스트를 거치지 않게 되고 런타임상 에러가 발생하게 된다면 InvalidCastException이 발생하게 됩니다.
그러나 as 를 이용하면 InvalidCastException이 일어나지 않고 NULL값으로 초기화 된다고 하는군요. 나름 쓸만한 기능이라고 생각을 하긴 합니다. 사실 그다지 다르다고 느끼는 점은 없지만요. 제가 C# 보다는 C++에 너무 익숙해져 있어서 그럴지도 모르겠습니다. 그래도 많은 부분이 달라진 것들이 차츰차츰 개선되어서 추가되고 하겠죠. 이러한 방법이 있다는 것도 알고 사용했으면 합니다.
"Language" 분류의 다른 글
| boost::spirit - Parser 라이브러리 (0) | 2008/04/23 |
| std::ostreambuf_iterator, std::istreambuf_iterator의 이유 (1) | 2008/04/16 |
| std::auto_ptr - Smart Pointer 이지만?? (1) | 2008/04/13 |
| C# Application - Main 에서 Try-Catch 오작동 해결하는 방법 (4) | 2008/04/07 |
| Boost 1.35 - 워크샵 뒤의 포스팅 (2) | 2008/04/03 |


댓글을 달아 주세요