메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

IT/모바일

Jlet Programming의 시작(1) - Jlet 응용프로그램 & Jlet 클래스

한빛미디어

|

2005-12-22

|

by HANBIT

9,795

저자: 박건태, 김승엽
출처: Jlet으로 배우는 위피 프로그래밍(한빛미디어, 2005) 3장 중에서


Jlet이란 모바일 플랫폼 규격에 따른 Java 응용 프로그램을 말한다. 우리가 하고자 하는 것은 WIPI 플랫폼 위에서 그것도 Jlet을 이용하여 프로그래밍을 하겠다는 것이다. 그렇다면 어디서부터 출발 해야 할 것인가? 초보자라면 일단 메모장이나 준비한 에디터의 빈 문서를 열어 놓고 어디서부터 어떻게 코딩 해야 할 지 전혀 감이 오지 않을 것이다.

여기서 필자는 새로운 접근법으로 ‘어디서부터 출발할 것인가’라는 문제를 해결해 나가보려 한다. 새로운 접근법이란 정의를 내리고 그에 합당한 이유를 제시하여 타당한 결론에 이르게 하겠다는 말이다.

프로그램이란

프로그램이란 무엇인가?
정의란 것이 한 사람의 소견으로는 될 수 없는 것이기에 ‘프로그램이 무엇이다.’라고 정의하는 것은 다소 위험한 일이다. 하지만 공학적으로나 언어학적으로 의견이 분분한 상태이며 확정적인 정의를 공시하는 것도 사실상 어려운 일이다. 어쨌거나 큰 틀에서 봤을 때 “프로그램이란 시작과 종료가 명확해야 한다.” 라고 말 할 수는 있을 것이다.

‘프로그램이란 시작 했다면 반드시 종료해야 하는 것.’이라 정의를 내리겠다.


[그림3.1-1 프로그램의 정의]

앞서 밝혔듯이 시작했다면 반드시 종료해야 하는 것이 프로그램이라 정의 했다. 그렇다면 어디론가의 진입점, 즉 시작점이 필요하며 어디로부터의 마지막 점이 필요하다. 바로 시작점과 마지막 점을 제공하는 것이 Jlet클래스이다.

Jlet 클래스에서 시작점인 startApp(), 종료 점인 destroyApp() 메소드를 제공한다는 뜻이기도 하다. 우리가 프로그램을 코딩하고 컴파일 한다면 Jlet 관리 프로그램은 시작점인 startApp()를 찾아 시작하게 되는 것이다. 이것은 C언어에서 main()함수로 진입하는 것과 같은 이치이다.

그렇다면 Jlet 클래스는 어떻게 생겼을까? 먼저 Jlet클래스의 계층도를 살펴보자.

java.lang.Object
  |
  +--org.kwis.msp.lcdui.Jlet

public abstract class Jlet extends Object

[Jlet 클래스 계층도]

계층도에서 볼 수 있듯이 Jlet클래스는 Object로부터 상속을 받아 org.kwis.msp.lcdui.Jlet에 정의 되어 있음을 알 수 있다. abstract class Jlet인 것을 보니 Jlet클래스는 추상(abstract) 클래스임을 알 수 있다.

즉, Jlet 프로그래밍을 한다는 것은 추상 클래스인 Jlet을 상속받아 새로운 클래스로 객체를 생성하여야 하며 Jlet을 상속받은 클래스는 모두 Jlet 응용프로그램이란 것을 알 수 있다. 그러므로 다음과 같이 프로그래밍을 하면 될 것이다.

Jlet 응용프로그램을 만들기 위해서는 ……
첫째, Jlet의 정보를 담고 있는 Jlet클래스의 위치 정보를 import 시킨다.

import org.kwis.msp.lcdui.Jlet;

둘째, Jlet 클래스를 상속받아 새로운 클래스를 정의 하기 위해 Jlet을 extends 시킨다.

public class ClassName extends Jlet

셋째, Jlet클래스는 추상클래스 이므로 추상메소드를 모두 구현 해야 한다.

public void startApp(String[] args){}
public void destroyApp(boolean b){}


[핵심]
• Jlet 프로그래밍을 한다는 것은 추상 클래스인 Jlet을 상속받아 새로운 클래스로 객체를 생성하여야 한다.
• Jlet을 상속받은 클래스는 모두 Jlet 응용프로그램이다.
• Jlet클래스는 추상클래스 이므로 추상메소드를 모두 재정의 해야 한다.
• Jlet클래스는 org.kwis.msp.lcdui.Jlet에 정의 되어 있다.

자, 또 하나 중요한 개념인 응용프로그램의 생명주기에 관해 알아보자.

프로그램이란 것은 시작과 종료를 명확히 제시해야 한다고 했다. 생명주기란 쉽게 말해서 프로그램이 시작해서 여러 가지 일들을 처리하다가 결국 끝에 다다르는 일련이 과정이라 할 수 있다. 이것을 인생에 비유한다면 인간의 생명주기란 인간이 태어나서(시작) 인생을 살다가 죽음(끝)에 이르기 까지를 말하는 것이다.

그렇다면 응용프로그램인 Jlet역시 생명주기가 존재한다는 것인데, 어떻게 정의 되어 있는지 그림을 통해 이해해보자.


[그림3.1-2 Jlet 생명주기]

위의 [그림3.1-2]에서 알 수 있듯이 Jlet의 생명주기는 Active, Paused, Destroyed의 3가지 상태를 가진다.

startApp() 메소드를 이용하여 Active상태가 되며 pauseApp() 메소드와 resumeApp() 메소드를 이용하여 Paused(일시정지)상태로 전이 하다가 언제든지 destroyApp() 메소드를 이용하여 Destroyed(종료)상태가 되는 것이다.

또 하나 유심히 봐야 하는 것은 위의 [그림3.1-2]에서 화살표를 방향을 보면 알 수 있듯이 Destroyed상태가 되면 더 이상 다른 상태로 전이 할 수 없다는 것인데 이것은 Jlet의 종료를 의미하며 사용하던 시스템 자원들을 완전히 반환한다는 것이다. 인생에 비유하자면 빈손으로 세상을 떠나는 것처럼 말이다.

[핵심]
Jlet의 생명주기는 Active, Paused, Destroyed의 3가지 상태를 가진다.

자, 이제 결론을 내리겠다.

프로그램이란 시작했다면 반드시 종료해야 하는 것이며 Jlet프로그래밍을 한다는 것은 생명주기를 구현할 수 있는 정보를 가진 Jlet클래스를 구현해야 한다.

Jlet 클래스 주요 method
protected abstract void startApp(String[] args)
프로그램이 시작 할 때 호출된다.
초기에 Jlet 생성되고 나서 단 한번만 호출된다.
Jlet에게 넘겨지는 인수가 args로 넘어 오며 이때 args[0]은 Jlet 이름이 되고, args[1]부터 사용자가 넘겨주는 인수가 된다.
protected void pauseApp()
시스템에서 응용 프로그램에게 일시 정지를 요청할 때 이 메소드를 호출한다.
정지하는 경우에 사용하고 있던 시스템 자원을 되돌려 줄 수 잇도록 구현해야 한다.
protected void resumeApp()
시스템에서 응용 프로그램에게 수행 재기를 요청할 때 이 메소드를 호출한다.
pauseApp메소드로 정지했던 Jlet를 재 구동시키며, 이 메소드내에서 pauseApp에서 돌려주었던 시스템 자원들을 다시 할당 받도록 구현해야 한다.
protected abstract void destroyApp(boolean unconditional)
프로그램이 종료 됨을 알려주는 메소드다. 프로그램이 어떤 상태이던, 이 메소드가 호출되면 프로그램이 종료 된다.
만일 인자 값에 true를 주면, 프로그램은 무조건 종료해야 하며 false를 주면 프로그램은 상황에 따라서 JletStateChangeException 예외를 던짐으로써 프로그램이 종료되는 것을 막을 수가 있다.
이 메소드에는 프로그램이 할당한 모든 자원을 시스템에게 돌려주고, 주요한 자료를 저장해야 한다.

이제 프로그램의 시작과 종료를 구현 하는 방법을 알았으니 Jlet의 가장 간단한 프로그램소스의 형태를 살펴보자.

Jlet 응용프로그램의 기본 Body 미리보기

import org.kwis.msp.lcdui.*;

public class ClassName extends Jlet
{
//프로그램이 시작할 때 호출
   public void startApp(String[] args){}

   public void pauseApp() {}
   public void resumeApp() {}

   //프로그램이 종료할 때 호출
   public void destroyApp(boolean b){}
}

위의 프로그램은 Jlet의 가장 간단한 형태이자 기본 골격이라 할 수 있다. 그러므로 눈에 익혀 놓자. 물론 앞으로 많은 예제들을 통해 자연스레 익숙해 질 것이다.

위의 소스는 아무것도 하지 않는 프로그램이다. 이 책에선 앞으로 위와 같은 기본 형태 위에서 실제 코딩이 이루어질 것이다. 또한 앞의 줄 번호(01~13)는 실제프로그램의 일부분이 아니다. 단지 여러분에게 시각적으로 편리함을 제공 하기 위해 번호를 적은 것이므로 실제 코딩시 빼야 할 것이다.

06줄~ 12줄

public void startApp(String[] args){}
public void pauseApp() {}
public void resumeApp() {}
public void destroyApp(boolean b){}

앞으로 소스 코드 설명 시 다음과 같이 줄 번호를 제시하거나 직접 전체 프로그램에서 필요한 일부를 가져다 쓸 것이다. 06줄에서 12줄을 보면 알 수 있듯이 Jlet프로그램은 startApp(),pauseApp(), resumeApp(),destroyApp(boolean b)로 구성되는 것을 알 수 있다. 특히 startApp()와 destroyApp(boolean b)는 추상 메소드로서 반드시 구현해야 한다.
TAG :
댓글 입력
자료실