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

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

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


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

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

Posted by ILTAL