정보공간_1

[bada 모바일플랫폼] basics of bada Programming 2 본문

IT 놀이터/IT Storehouse

[bada 모바일플랫폼] basics of bada Programming 2

알 수 없는 사용자 2011. 7. 10. 12:11
안녕하세요 ^^ 붉은 고래 입니다.  오랜만의 글을 올리게 되었습니다.

너무 글을 연재 하지 않아, 성실하게 블로그에 바다 글을 연재 해 볼까 합니다.

긴 휴식 시간을 가진 만큼 더욱더 알찬 내용을 가지고 오겠습니다.

오늘은 basics of bada Programming 2 시간에는 C++의 casting에 대해서 알아보고, 

현재 bada에서 Casting하고 있는 부분을 설명하고, 간단한 기능을 구현해 보도록 하겠습니다.^^

안전한 프로그램을 구현 하기 위해서는 casting에 대한 정확한 이해가 필수 겠죠?

그럼 지금 부터 차근차근 Casting에 대해서 알아 보도록 하겠습니다. 

[재미있는 Casting 이야기.]

 C언어에서도 C++(bada)와 마찬가지로, 캐스팅 연산자가 존재 합니다. 하지만 C언어세는 강제적인 형변환

으로 인해, 100프로 형변환이 일어 나서 무척 위험한 경우가 많으며, 종종 위험한 버그를

만들어 내는 경우도
있습니다.

 그래서 C++에서는 
static_cast, const_cast
reinterpret_cast, dynamic_cast  4개의

명시적 캐스
팅 연산자를 만들었습니다. 

가장 이상적으로, 바다에서 사용 되어 지고 있는 static_cast 연산자 부터 예제 소스 코드

를 통해서,  자세히 알
아 보도록 하겠습니다.

 
[C++ 예제 코드]

double
d=098.765; int i;
i=  static_cast<int>(d);   
pi= (int *)str;  // 강제적인 형 변환 가능 하지만 위험함.
pi= static_cast<int *>(str); // 컴파일 타입 에러.


#include <iostream>
using namespace std;

class bada { };
class wave : public bada { };
int main()
{
     bada P,*pP;
     wave C,*pC;
     pP=static_cast<bada *>(&C);  // 업캐스팅 가능.
     pC=static_cast<wave *>(&P);  // 다운 캐스팅 가능하지만 위험함
return 0; }


static_cast 
는 논리적으로 변환이 가능한 경우에만 허용 되며, 포인터 타입의 캐스팅을

했을 경우, 컴파일러
타임 때 에라가 나타 납니다.  따라서 개발자에게 위험을 알려 주므

로써, 프로그램의 안전성을 보장 해 줄수 있
습니다.

그럼 바다에서 캐스팅 하고 있는 부분을 한번 살펴 볼까요?

[bada 예제 코드] 
__pLabelButton =
static_cast<Label *>(GetControl(L"IDF_LABEL_BUTTON"));

Button *pButtonOn = 
static_cast<Button *>(GetControl(L"IDF_BUTTON_ON"));

Button *pButtonOff = 
static_cast<Button *>(GetControl(L"IDF_BUTTON_OFF"));




    [그림1] Inheritance diagram for Button

위의 예제 코드와 그림에 살펴 보면, Button은 Control라는 부모로 부터 상속을 받습니다.

그래서 안전한 캐스팅을 하기 위해서, static_cast 캐스트 연산자를 사용하여, Button을 다운

캐스팅을 하고 있습니다. 이렇게 캐스팅을 사용 했을 경우, 코드의 가독성의 증가와, 컴파일 타입에서 캐스팅의

안전성을 확인 해 주기 때문에 개발자에게 유익합니다.

그럼 여러분도 앞으로 캐스팅은 무조건 C++에서 제공 해주는 연산자를 사용 해야겠죠?

이번 장에서는 static 캐스팅 연산자에 대해서 알아 보았고, 다음시간에는 남은 연산자에 대해서

설명 하는 시간을 가지도록 하겠습니다.

이상 붉은 고래 였습니다.



 

                                                                              lscpjyoon@gmail.com