일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Bidirectional Associative Memory
- 삼성
- hopfield network
- 삼성소프트웨어멤버십
- 신경회로망
- Python
- SSM
- 갤럭시탭S8울트라
- 패턴 인식
- 증강현실
- 동아리
- 빅데이터
- 인공지능
- Neural Network
- Google App Engine
- 가상화
- BAM
- NarwalFreo
- 멤버십
- 삼성전자 소프트웨어멤버십 SSM
- 물걸레자동세척로봇청소기
- 신경망
- 나르왈프레오
- 하이퍼바이저
- 패턴인식
- 고려대학교
- 구글 앱 엔진
- Friendship
- 파이썬
- 물걸레로봇청소기추천
- Today
- Total
정보공간_1
[bada 모바일플랫폼] basics of bada Programming 1 본문
[그림 2] 바다 플랫폼의 특징.
표준 C++에서 Interface라는 키워드가 없음에도 불구하고, I+ClassName으로 명명하여, 인터페이스를 설계하여 활용하였습니다.
(인터페이스에 대해서는 앞으로 강의에 설명할 예정입니다. ^^)
또한 예외처리 부분에서도 try/catch보다는 bada exception mechanism을 사용을 권장 하고 있으며, STL(Standard Template Library)의 Collection보다는 bada Collection을 사용 합니다.
이처럼, 속도가 빠르고, 안정화된 바다 앱 개발을 하기 위해서는 바다 모바일 플랫폼만의 언어적 특징을 잘 이해하시고, 프로그래밍 작업을 해야 합니다.
그럼 지금 부터 basics of bada Programming의 첫번째 단계인 메모리와 할당에
대해 설명 하겠습니다.
- 메모리 할당과 해체 -
바다 플랫폼에서 개발자가 아래의 코드와 같이 메모리를 할당 하게 되면, 메모리 사용이 종료된 후에는 반드시 그 메모리를 명시적으로 해체해 주어야 합니다.
Object* pObj = new Object();
........ // 코드 생략.
delete pObj;
명시적으로 해체를 하지 않을 경우, 메모리 누수가 발생 합니다. ContentSearch search; result r = search.Construct(CONTENT_TYPE_IMAGE); if(IsFailed(r)){ } //Call GetValueListN() of ContentSearch IList* pValueList = search.GetValueListN(L"Author"); if(IsFailed(GetLastResult())){ //do something for an error } //Delete resource pValueList->RemoveAll(true); delete pValueList;
바로 위의 소스 코드처럼, 내부적으로 메모리를 할당하여 사용하는 메소드들에 대해서는 메소드 이름 뒤에 "N"이라는 알파벳을 붙여서 개발자들이 메소드의 이름만 보고도 메모리를 해체 해야 한다는 사실을 알리고 있습니다.
이처럼, 할당된 메모리는 리소스 누수를 막기 위해, 반드시 delete 연산자를 통해서 메모리 해체를 해야 합니다.
하지만, 바다 플랫폼에서는 몇가지 예외적인 규칙이 있습니다.
모든 컨트롤들은 객체를 할당하여, 힙에 의해서 관리 되어야 하고, 개발자가 꼭 명시적으로 자원을 해체 할 필요는 없습니다.
Button *pButton= new Button();
pButton->Construct(Rectangle(10, 100, 460, 60));
pButton->SetText(L”붉은고래”);
pButton->SetActionId(10);
pButton->AddActionEventListener(*this);
AddControl(*pButton);
위의 예제 소스 코드는 바다 모바일 플랫폼에서 Button 객체를 생성하였습니다.
생성된 Button 객체는 프로그램이 종료 될때 자동적으로 해체가 되므로, 절대로
개발자가 명시적으로 delete 연산자를 이용하여, 절대로 메모리 해체를
하시면 안됩니다.
하지만, MessageBox, ContextMenu, OptionMenu, Popup([그림3] 참고) 와같이 명시적으로 개발자가 delete 연산자를 이용하여 직접 메모리 해체를 해야 합니다.
[그림 3] 명시적으로 메모리 해체 해야 하는 컨트롤
다시 말해, MessageBox, ContextMenu, OptionMenu, Popup 와 같은 Container들은 개발자가 직접 명시적으로 메모리 해체를 해줘야 하지만, Button과 같이 Child Control들은 부모Container가 파괴 될때, 자동적으로 Child Controls을 delete를 해줍니다. 따라서 개발자가 Child Controls에 대해서는 메모리를 해체 할 필요가 없습니다.
그럼 아래의 예제를 한번 살펴보고, 이번 강의를 정리 하도록 하겠습니다.
- 소스코드 설명:
Child Controls인 버튼 객체 생성 하여, Popup Container에 넣기
result bada::OnInitializing(void) {
result r = E_SUCCESS;
__pPopup = new Popup();
Dimension dim(300, 400);
__pPopup->Construct(true, dim);
__pPopup->SetTitleText(L"Popup Test");
Button* pBtnClose = new Button();
pBtnClose->Construct(Rectangle(10, 10, 250,
60), L"Close");
pBtnClose->SetActionId(ID_BUTTON_CLOSE_POPUP);
pBtnClose->AddActionEventListener(*this);
__pPopup->AddControl(*pBtnClose);
}
result bada::OnTerminating(void) {
result r = E_SUCCESS;
delete pPopup;
return r;
}
Container : Popup delete(0)
Child Controls : Button delete(x)
※ 오늘의 강의 정리! ★ 꼭 기억 하세요 ★
1. 모든 컨트롤들은 힙에 생성해야 한다.
2. Container Controls들은 명시적으로 메모리 해체를 해야 한다.
3. Child Controls들은 메모리 해체를 할 필요가 없다.
이번강의는 바다 모바일 플랫폼에서 꼭 지켜야 할 메모리 할당과 해체 부분에 대해서 강의를 하였습니다.
혹시 잘모르는 경우가 있을 경우에는 아래의 메일로 연락 주시거나(lscpjyoon@gmail.com), 댓글을 남겨주세요.
다음 강의에서는 더욱더 알찬 정보를 가지고 오겠습니다. ^^
좋은 하루 보내세요!
'IT 놀이터 > IT Storehouse' 카테고리의 다른 글
[linux] 프로세스 공간 관리 (0) | 2011.06.29 |
---|---|
[Linux] <Session 2> 물리 메모리 관리 (0) | 2011.06.13 |
[UX designer] 개발자와 협업하기- Wireframe과 Task flow chart (4) | 2011.05.31 |
[UX] Paper Prototyping에 관련된 이야기 (1) | 2011.05.31 |
[bada 모바일 플랫폼] Hello bada!! (10) | 2011.05.24 |