S/W Development/bada2010. 11. 16. 17:10

바다 플랫폼에서는 2단계 생성자를 사용하는 것이 안전합니다. 심비안(Symbian)에서 사용하던 방식을 차용한 것인데요. 기존 C++ 코드처럼 기본 생성자에서 다른 객체에 대한 메모리를 확보하도록 선언했다고 가정하면, 이 때 생성자 코드를 수행하던 중에 알수 없는 오류로 인해 생성자를 나가게 되면 메모리 누수(Memory Leak)가 일어납니다. 일반 PC에서는 이런 것이 큰 문제가 되지 않을 수도 있지만, 모바일에서처럼 메모리 크기가 큰 이슈로 작용하는 경우에는 문제로 작용될 가능성이 큽니다. 이러한 메모리 누수를 해결할 방법이 2단계 생성자입니다. 기본 생성자에서는 내부 인스턴스에 대한 메모리 확보를 하지 않고 따로 메모리 확보를 위한 메서드를 추가하는 방식입니다.

코드를 보면서 설명하겠습니다.


5번째 줄에서 에러가 발생하는 경우에는, 소멸자가 호출되지 못해서 메모리가 할당된 b1객체는 메모리 누수가 일어나게 됩니다. 이를 방지하기 위해서 11번째 줄처럼 실제 생성자에서는 내부 인스턴스에 대한 메모리 할당을 해주지 않기 때문에 이미 객체는 생성이 되었기 때문에 앞으로 클래스 객체를 사용하면서 문제가 발생되더라도 소멸자가 호출되기 때문에 메모리 누수가 일어나지 않도록 할 수 있습니다.

그래서 바다에서는 객체를 생성하고 사용할 때에는 다음과 같이 2단계 생성자 방식을 따릅니다.

Posted by ILTAL
S/W Development/bada2010. 11. 15. 18:51

아이콘과 로딩 화면 교체 방법
다국어 지원시 작성 방법
2phase construction
Posted by ILTAL
S/W Development/bada2010. 11. 15. 18:15

이번 강좌는 바다 애플리케이션 동작 방식에 대한 기본적인 이해를 돕고자 작성되었습니다.

 

바다 플랫폼에서 애플리케이션 타입은 다음과 같은 크게 두 가지로 구성됩니다.

 

  • Base Application
  • bada Application

 

Base Application은 Dialer, Contact, Camera, Music Player와 같은 핵심적인 애플리케이션을 의미하고, bada Application은 설치와 삭제가 가능한 애플리케이션 즉, 모든 3rd party 애플리케이션을 의미합니다.

 

바다 플랫폼에서 동작하는 bada Application Model은 다음과 같은 다이어그램을 참고하면 이해하기 쉽습니다.

가장 하위단에는 OS(멘토 그래픽스사의 Nucleus RTOS를 기반으로 동작함)가 있고, 그 위에 Framework을 위미하는 F라는 접두어를 포함한 FApp 이라는 Application Framework이 있습니다. 이 프레임워크는 애플리케이션에서 발생하는 모든 이벤트를 처리하고, 우리가 만들 애플리케이션과 상호 작용합니다.

 

 

bada Application의 Life Cycle은 다음과 같이 크게 세 단계로 구성됩니다.

 

  • Launch
    • OnAppInitializing : 애플리케이션이 실행될 때, 초기화를 위해서 Application Framework에서 호출합니다.
    • OnForeground : 애플리케이션이 실행되면 처음에는 Foreground로 실행되어 지기 위해 Application Framework에서 호출됩니다.
  • Running
    • OnBackground : bada Application(유저가 홈키를 눌렀거나 전화가 왔을 때와 같은 이벤트가 발생되면)의 실행되면 OnBackground 가 Application Framework에서 호출됩니다.
    • OnForeground : bada Application이 종료되면 다시 OnForeground 가 Application Framework에서 호출됩니다.
  • Termination
    • OnAppTerminating : 다음과 같은 상황이 발생되면 Application Framework가 이 동작을 수행합니다.
      • 유저가 종료 키를 눌렀을 때
      • 유저가 다른 bada Application을 실행했을 때(현재 바다 플랫폼에서는 한번에 하나의 bada Application만 실행할 수 있습니다.)
      • 가용 가능한 메모리가 현저히 적을 때

 

 

바다 애플리케이션이 실행되는 전체적인 흐름은 아래 다이어그램을 보면 이해에 도움이 됩니다.

 

 

이와 함께, 지난 번에 만들었던 Hello Bada 프로젝트의 HelloBada 헤더 파일을 살펴보면 어떻게 Virtual Class들을 상속받아서 구현하여 우리가 만드는 bada Application이 동작하는 지 이해하기 좋습니다.

 

다음 코드는 HelloBada.h 파일에 대한 소스 코드입니다.

 

 

이번 강좌를 통해서 바다 애플리케이션의 동작 방식에 대해서 간략하게 알아봄으로써 앞으로 애플리케이션을 개발하는데 있어 많은 도움이 될 것이라고 생각합니다.

Posted by ILTAL