midlet 프로그램 구조 및 생명 주기

46
MIDlet MIDlet 프프프프 프프 프 프프프프 프프 프 프프 프프 프프 프프 Lecture #3 Lecture #3

Upload: xannon

Post on 23-Jan-2016

156 views

Category:

Documents


0 download

DESCRIPTION

MIDlet 프로그램 구조 및 생명 주기. Lecture #3. 강의 목차. J2ME 플랫폼 개요 MIDlet 프로그램의 기본 구조를 익힌다 . MIDP 2.0 패키지의 종류를 알아본다 . 문자열을 출력하는 간단한 MIDlet 프로그램을 작성한다 . 문자열 출력을 응용해 게임 방법을 설명하는 화면을 만들어 본다. J2ME(Java 2 Micro Edition) 플랫폼. “One size doesn't fit all”. “WORA (Write Once Run Anywhere.)”. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: MIDlet  프로그램 구조 및   생명 주기

MIDletMIDlet 프로그램 구조 및 프로그램 구조 및 생명 주기생명 주기

Lecture #3Lecture #3

Page 2: MIDlet  프로그램 구조 및   생명 주기

강의 목차강의 목차

▶ J2ME 플랫폼 개요▶ MIDlet 프로그램의 기본 구조를 익힌다 .▶ MIDP 2.0 패키지의 종류를 알아본다 .▶ 문자열을 출력하는 간단한 MIDlet 프로그램을 작성한다 .▶ 문자열 출력을 응용해 게임 방법을 설명하는 화면을 만들어

본다 .

2Mobile Programming

Page 3: MIDlet  프로그램 구조 및   생명 주기

J2ME(Java 2 Micro Edition) J2ME(Java 2 Micro Edition) 플랫폼플랫폼

3

“One size doesn't fit all” “WORA (Write Once Run Anywhere.)”

Mobile Programming

Page 4: MIDlet  프로그램 구조 및   생명 주기

J2ME(Java 2 Micro Edition) J2ME(Java 2 Micro Edition) 플랫폼플랫폼

4

Embedded Java

- Personal Java 보다 협소적 환경의 spec.

“WORA (Write Once Run Anywhere)”

Personal Java

- 소형기기에 적합한 spec.

- J2ME CDC 의 모태

한계를 극복하기 위한 방안

- J2ME 에서는 각 디바이스와 운영환경에 맞게 플랫폼을 분할

( 플랫폼 분할을 위해 configuration 과 profile 개념 도입 )

Mobile Programming

Page 5: MIDlet  프로그램 구조 및   생명 주기

Configuration and Profile (1)Configuration and Profile (1)

▶ Configuration and Profile : ▷ J2ME 의 핵심적 요소 ▷ 플랫폼의 통일성과 다양성을 만족 시킴▷ VM 과 클래스 라이브러리를 특정한 장치 그룹에 최적화하는 것 ▷ 현재 CLDC 와 CDC Configuration 으로 정의

5

CLDC 디바이스 군 :

- 16 비트 또는 32 비트 CPU- 160KB~512KB 크기의 메모리 (RAM 과 ROM 포함 )- 제한된 전력 또는 배터리 파워 공급 낮은 네트웍 전송률 등의 기기 사양- 핸드폰 , 양방향 삐삐 , 또는 PDA 등과 같은 기기

CDC 디바이스 군

- 32 비트 CPU- 2MB 이상의 메모리 (RAM 과 ROM 포함 )- 낮은 네트웍 전송률 (9600 bps 보다 낮을 수 있음 )- PDA, 가전 기기 , 자바폰 , 디지털 셋톱 (Set-top) 박스 등과 같은 기기

Mobile Programming

Page 6: MIDlet  프로그램 구조 및   생명 주기

Configuration and Profile (2)Configuration and Profile (2)

▶ J2ME 컨피규레이션과 프로파일 및 임베디드 자바 기술

6

CLDC (Connected Limited Device Configuration) and KVM (K Virtual Machine)

http://java.sun.com/products/cldc/

CLDC 는 128K 에서 512K 크기의 메모리를 갖는 핸드폰과 같은 손으로 들고 다닐 수 있는(hand-held) 기기를 지원하기 위한 컨피규레이션이다 .

CDC (Connected Device Configuration) and CVM (C Virtual Machine)

http://java.sun.com/products/cdc/

CDC 는 2MB 또는 그 이상의 메모리를 갖는 차세대 기기를 지원하기 위한 API 를 정의하고 있는 컨피규레이션이다 .

MIDP (Mobile Information Device Profile)

http://java.sun.com/products/midp/

MIDP 는 CLDC 와 함께 셀룰라 폰 ( 핸드폰 ) 및 양방향 페이저와 같은 기기들을 위한 완전한 애플리케이션 환경을 제공해 준다 .

Foundation Profile

http://java.sun.com/products/foundation/

CDC 와 함께 차세대 소비 기기를 위한 완전한 애플리케이션 환경을 제공한다 .

Mobile Programming

Page 7: MIDlet  프로그램 구조 및   생명 주기

Configuration and Profile (3)Configuration and Profile (3)

7

Java TVTM Technology

http://java.sun.com/products/javatv/

인터랙티브 디지털 TV 를 위한 개발 및 배포 환경을 제공한다 .

Java Embedded ServerTM Software

http://www.sun.com/software/embeddedserver/

임베디드 가전 기기들이 서로 네트워크로 연결되고 인터넷에 연결될 수 있도록 하고 , on-demand 서비스를 받을 수 있도록 한다 .

Java CardTM Technology

http://java.sun.com/products/javacard/

자바 프로그램이 스마트 카드와 다른 작은 기기에서 실행될 수 있도록 해 준다 .

PersonalJavaTM Application Environment

http://java.sun.com/products/personaljava/

PDA 와 같은 집 , 회사 , 모바일 기기들을 위한 애플리케이션을 개발할 수 있도록 해 주는 자바 가상 머신과 클래스 라이브러리이다 .

J2METM Wireless Toolkit

http://java.sun.com/products/j2mewtoolkit/

모바일 인포메이션 기기에 맞게 개발되는 MIDP 호환 애플리케이션을 위한 개발 툴이다 .

Mobile Programming

Page 8: MIDlet  프로그램 구조 및   생명 주기

Configuration and Profile (4)Configuration and Profile (4)

▶ Configuration : ▷ java.io▷ java.net▷ java.util▷ java.lang▷ Configuration 이 포함하고 있는 명세 :

자바언어에 대한 명세 : 부동소수점 지원 여부 등 가상 머신에 대한 명세 : KVM, pJava, eJava Core API 에 대한 명세 : java.* 패키지

▶ Profile : ▷ 특정 device 및 산업군에 맞는 API 에 대한 명세▷ 이식성 (Portability) 을 지원

8Mobile Programming

Page 9: MIDlet  프로그램 구조 및   생명 주기

CLDC/MIDP CLDC/MIDP 구조구조

9Mobile Programming

Page 10: MIDlet  프로그램 구조 및   생명 주기

CLDC (1)CLDC (1)

▶ KVM (Kilobyte or Kauai Virtual Machine)▷ NTT 도코모와 3Com 에서 탑재▷ kilobyte 단위로 디자인▷ 메모리 풋프린트는 50KB, 클래스 라이브러리 포함 128KB

10Mobile Programming

Page 11: MIDlet  프로그램 구조 및   생명 주기

CLDC (2)CLDC (2)

▶ CLDC(Connected Limited Device Configuration) 명세서 ▷ 자바 언어 및 가상 머신의 특징▷ 코어 자바 라이브러리 (java.* 로 시작하는 패키지들 )▷ 네트워킹과 입출력▷ 보안과 국제화

▶ CLDC 디바이스 목표 ▷ 128-512K 의 메모리 여유 공간▷ 16-32 비트 프로세서▷ 저전력 소모 , 주로 배터리 사용▷ 제한된 대역폭 (9600 bps 이하 ) 의 네트워크 연결성

11Mobile Programming

Page 12: MIDlet  프로그램 구조 및   생명 주기

CLDC (3)CLDC (3)

▶ CLDC 의 특징▷ 부동 소수점을 지원 안 함 .▷ 마무리 (finalization) 을 지원 안 함 .▷ 에러 처리가 제한적이다 .▷ JNI(Java Native Interface) 를 지원 안 함 .▷ 리플렉션을 지원 안 함 . ▷ 쓰레드 그룹과 데몬 쓰레드를 지원 안 함 .▷ 사용자 정의 클래스 로더를 생성할 수 없다 .▷ 약한 참조 (weak reference) 를 지원 안 함 .▷ 클래스 파일 포맷이 다르고 , 클래스 룩업 , 클래스 로딩과 링킹

방법이 다름 ▷ 모래상자 보안 모델을 사용한다 . ▷ 전혀 다른 네트워킹 및 입출력 모델을 가지고 있다 .▷ 새로운 어플리케이션 모델을 가정하고 있다 .

12Mobile Programming

Page 13: MIDlet  프로그램 구조 및   생명 주기

CLDC (4)CLDC (4)

▶ 클래스 파일 검증 과정

13Mobile Programming

Page 14: MIDlet  프로그램 구조 및   생명 주기

CLDC (5)CLDC (5)

▶ GCF (Generic Connection Framework)

14

인터페이스 이름 설 명

ConnectionGeneric Connection Framework 에서 가장 기본이 되는 최상위 인터페이스

InputConnection 데이터를 읽어들일 수 있는 디바이스를 표현하는 연결형

OutputConnection 데이터를 전송할 수 있는 디바이스를 표현하는 연결형

StreamConnection단순히 InputConnection 과 OutputConnection 을 통합하기 위한 인터페이스 . 커뮤니케이션 인터페이스를 실제로 구현하는 클래스를 위한 논리적인 출발점을 제공

ContentConnectionHTTP 연결에 의한 기본적인 메타 데이터 정보에 대한 접근을 제공하는 StreamConnection 의 하위 인터페이스

StreamConnectionNotifier

연결이 설정될 때까지 기다리기 위해 사용되는 연결형 . acceptAndOpen( ) 메소드는 클라이언트 프로그램이 연결될 때까지 블록되고 , 연결이 설정되면 StreamConnection 을 리턴 .

DatagramConnection

데이터그램 종단을 표현하기 위한 연결형 .

Mobile Programming

Page 15: MIDlet  프로그램 구조 및   생명 주기

CLDC (6)CLDC (6)

▶ CLDC API

15

java.lang 패키지 java.util 패키지 java.io 패키지

• 시스템 클래스java.lang.Objectjava.lang.Classjava.lang.Runtimejava.lang.Systemjava.lang.Threadjava.lang.Runnable java.lang.Stringjava.lang.StringBufferjava.lang.Throwable• 데이터 타입 클래스java.lang.Booleanjava.lang.Bytejava.lang.Shortjava.lang.Integerjava.lang.Longjava.lang.Character수학 클래스java.lang.Math

• 컬렉션 클래스java.util.Vectorjava.util.Stackjava.util.Hashtablejava.util.Enumeration • 날짜관련 클래스java.util.Calendarjava.util.Datejava.util.TimeZone• 유틸리티 클래스java.util.Random

• 입출력 클래스java.io.InputStreamjava.io.OutputStreamjava.io.ByteArrayInputStreamjava.io.ByteArrayOutputStreamjava.io.DataInput java.io.DataOutput java.io.DataInputStreamjava.io.DataOutputStreamjava.io.Readerjava.io.Writerjava.io.InputStreamReaderjava.io.OutputStreamWriterjava.io.PrintStream

Mobile Programming

Page 16: MIDlet  프로그램 구조 및   생명 주기

MIDPMIDP (Mobile Information Device Profile) (Mobile Information Device Profile) (1)(1)

▶ MIDP 명세서 정의▷ 어플리케이션 모델▷ 유저 인터페이스와 이벤트 핸들링▷ 영속적 저장공간▷ 네트워킹 , 타이머 지원▷ 디스플레이 요구사항

96x54 이상의 스크린 사이즈 1비트 이상의 디스플레이 ( 모노크롬 ) 종횡비 (aspect ratio) 가 약 1:1 에 근접

▷ 입출력 요구사항 한 손 , 혹은 두 손으로 입력가능한 입출력 메커니즘

▷ 메모리 요구사항 MIDP 컴포넌트를 위한 128K 의 비휘발성 메모리 공간 애플리케이션이 생성하는 데이터의 저장을 위한 8K 의 비휘발성 메모리 공간 자바 런타임을 위한 32K 의 휘발성 메모리 공간

▷ 네트워킹 요구사항 양방향이고 , 무선이며 , 제한된 대역폭에 , 간헐적으로 연결될 수 있음

16Mobile Programming

Page 17: MIDlet  프로그램 구조 및   생명 주기

MIDP (2)MIDP (2)

▶ MIDP NG (Next Generation)▷ MIDP 1.0 과의 백워드 호환성▷ 작고 , 대용량인 무선 핸드폰▷ 코아 API 가 많아지는 것을 막기 위한 긴밀한 풋프린트 유지▷ MIDP 1.0 API 를 튜닝하기 위해 MIDP 배치시에 얻은 많은 정보▷ 모든 디바이스와 어플리케이션에 필요한 코아 기능 ▷ mCommerce, 서비스 기반 어플리케이션을 가능

▶ MIDP NG 는 차세대 MIDP 로서 현재 JCP 에 의해 JSR 118번으로 개발되고 있음 ▷ 관련 사이트 : http://jcp.org/jsr/detail/118.jsp

17Mobile Programming

Page 18: MIDlet  프로그램 구조 및   생명 주기

JAMJAM 과 신개념 어플리케이션 모델과 신개념 어플리케이션 모델 (1)(1)

▶ JAM (Java Application Manager)▷ MIDlet 은 자바 애플릿과 유사한 방식으로 실행▷ MIDlet 을 다운로드하여 설치 , 업그레이드 , 실행 , 삭제하는 역할

▶ JAM 의 기본 기능

18

기 능 설 명

추출 (retrieval) 웹 사이트 등의 소스로부터 MIDlet 을 추출하는 기능

인스톨 (installation) 추출한 MIDlet 을 디바이스에 설치하는 기능

실행 (launching) MIDlet 을 호출하는 기능

버전 관리 설치된 MIDlet 을 새로운 버전으로 업그레이드 하는 기능

삭제 (removal) 설치된 프로그램을 삭제하는 기능

Mobile Programming

Page 19: MIDlet  프로그램 구조 및   생명 주기

JAMJAM 과 신개념 어플리케이션 모델 과 신개념 어플리케이션 모델 (2)(2)

19

JAM 을 통한 어플리케이션 설치 과정 :

Mobile Programming

Page 20: MIDlet  프로그램 구조 및   생명 주기

MIDletMIDlet 과 과 JAR JAR 파일파일

▶ MIDlet 은 JAR 파일 형태로 배포▶ JAR 파일에는 MIDlet 슈트의 패키지가 들어갈 수 있음

▷ JAR 컨텐츠에 대한 설명을 담고 있는 매니페스트 (manifest)▷ MIDlet 클래스를 상속한 클래스들과 다른 공유 클래스들▷ MIDlet 이 사용하는 리소드 파일들 ( 예를 들면 아이콘 , 이미지 등 )

▶ 매니페스트에서 필수적으로 들어가야 하는 속성 (Attributes)▷ MIDlet-Name

▷ MIDlet-Version▷ MIDlet-Vendor▷ MIDlet-<n>▷ MicroEdition-Configuration▷ MicroEdition-Profile

▶ MIDlet 은 javax.microedition.midlet.MIDlet 클래스를 반드시 상속해야 함 .

Mobile Programming 20

Page 21: MIDlet  프로그램 구조 및   생명 주기

MIDlet AttributesMIDlet Attributes

21

애트리뷰트 이름 설 명

MIDlet-Name MIDlet 슈트의 이름

MIDlet-VersionMIDlet 슈트의 버전 번호 . major.minor.micro 의 형태로 정의되며 , JAM 이 설치 및 업그레이드를 위한 정보로 활용

MIDlet-Vendor MIDlet 슈트의 제공자

MIDlet-Description MIDlet 슈트에 대한 설명

MIDlet-Info-URL MIDlet suite 에 대한 자세한 설명을 포함한 URL

MIDlet-<n>JAR 파일안에 포함된 MIDlet 의 표시이름 , 아이콘 , 클래스명 . 하나의 JAR 파일에 여러 개의 MIDlet 이 포함되어 있을 경우 , 번호로 식별하게 되며 , <n>은 최소값이 1이고 , 반드시 순차적인 숫자를 사용하여야 한다 .

MIDlet-Jar-URL JAR 파일이 로딩될 URL

MIDlet-Jar-Size JAR 파일의 크기 ( 바이트 단위 )

MIDlet-Data-SizeMIDlet 이 필요로 하는 영속적 데이터의 크기 ( 바이트 단위 ). 디바이스에서는 이에 따라 추가적인 스토리지를 제공해야 하고 , 디폴트는 0이다 .

MicroEdition-Configuration

시스템 프로퍼티의 microedition.configuration 값과 동일한 J2ME 컨피규레이션 ( 예를 들어 , “CLDC-1.0”)

MicroEdition-Profile시스템 프로퍼티의 microedition.profiles 값과 동일한 J2ME 프로파일 ( 예를 들어 , “MIDP-1.0”)

Mobile Programming

Page 22: MIDlet  프로그램 구조 및   생명 주기

어플리케이션 디스크립터어플리케이션 디스크립터 (JAD)(JAD)

▶ MIDlet 애트리뷰트를 효율적으로 전송 .▶ MIME type : text/sun.j2me.app-descriptor▶ 어플리케이션 디스크립터에 포함 되어야 할 필수적인

애트리뷰트▷ MIDlet-Name▷ MIDlet-Version▷ MIDlet-Vendor▷ MIDlet-Jar-URL▷ MIDlet-Jar-Size▷ MicroEdition-Profile▷ MicroEdition-Configuration

22Mobile Programming

Page 23: MIDlet  프로그램 구조 및   생명 주기

MIDlet MIDlet 프로그램의 생명주기 프로그램의 생명주기 (1)(1)

▶ MIDlet 프로그램의 생명주기

23Mobile Programming

정지

실행

종료

Page 24: MIDlet  프로그램 구조 및   생명 주기

MIDlet MIDlet 프로그램의 생명주기 프로그램의 생명주기 (2)(2)

▶ 정지▷ MIDlet 프로그램이 초기화되거나 일시정지 (Paused) 된 상태로 공유

리소스를 점유하지 않는다 . ▷ MIDlet 을 처음 실행하면 응용 프로그램 관리자는 일시정지 상태로

들어간다 . 그런 뒤 자원 할당이 가능하면 startApp() 를 호출하여 실행 상태로 바꾼다 .

▶ 실행▷ MIDlet 프로그램이 실행 (Active) 되는 상태다 . ▷ 응용 프로그램 관리자가 startApp() 메소드를 요청하거나 미들렛이

esumeRequest() 를 응용 프로그램 관리자에게 요청해서 startApp() 가 호출될 때 실행 상태로 들어간다 .

▶ 종료▷ MIDlet 프로그램이 종료 (Destroyed) 되는 상태로 , 공유 리소스를

해제한다 . ▷ 일시정지나 실행 상태에서 destroyApp() 를 호출하면 , 응용 프로그램 관리자는 종료 상태로 들어가서 프로그램을 종료한다 .

24Mobile Programming

Page 25: MIDlet  프로그램 구조 및   생명 주기

MIDlet MIDlet 프로그램의 생명주기 프로그램의 생명주기 (3)(3)

25

startApp() : - 필요한 리소스에 대한 점유 획득 . Active 상태로 전이

pauseApp() : - 임시적인 리소스들에 대한 점유 해제 . Pause 상태로 전이

destroyApp() : - MIDlet 이 종료한 상태 . 공유 리소스를 해제한다 . - Destoryed 상태로 전이

MIDlet 의 상태 다이어 그램

Mobile Programming

Page 26: MIDlet  프로그램 구조 및   생명 주기

네트워킹네트워킹

▶ MIDP 1.0 명세서는 HTTP 1.1 프로토콜의 서브셋을 지원 .

▶ MIDP 는 javax.microedition.io.HttpConnection 을 통해 HTTP 연결을 지원 .

Mobile Programming 26

Page 27: MIDlet  프로그램 구조 및   생명 주기

레코드 관리 시스템레코드 관리 시스템 (RMS) (RMS)

▶ 데이터를 영속적으로 저장하고 사용하기 위해 RMS (Record Management System) 메커니즘을 제공 .

▶ 레코드 기반의 초소형 데이터베이스 .▶ Javax.microedition.rms 패키지를 통해 제공 .

Mobile Programming 27

클래스 및 인터페이스 설 명

RecordStore 바이트 배열로 이루어진 레코드들을 여러 개 가지고 있는 레코드스토어에 대한 구현 클래스

RecordComparator 두 개의 레코드를 비교하기 위한 Comparator 인터페이스

RecordEnumeration 레코드를 탐색하기 위한 Enumeration 인터페이스

RecordFilter 어떤 레코드가 조건을 만족하는 지 검사하기 위한 필터 인터페이스

RecordListener 레코드에 대한 추가 /변경 /삭제 이벤트를 감지하기 위한 리스너 인터페이스

Page 28: MIDlet  프로그램 구조 및   생명 주기

타이머 지원 타이머 지원

▶ 일정한 시간 동안 지정해서 한번만 실행하거나 일정한 간격으로 여러 번 반복적으로 실행하도록 스케쥴링 할 수 있다 .

▶ Java.util.Timer▶ Java.util.TimerTask

28Mobile Programming

Page 29: MIDlet  프로그램 구조 및   생명 주기

유저 인터페이스 유저 인터페이스 (1)(1)

▶ MIDP 유저 인터페이스 설계 원칙1. 한 손으로 입력 가능해야 한다 .2. 작은 스크린 사이즈에 적용 가능해야 한다 .3. 포인팅 디바이스가 없는 단말기에 적용 가능해야 한다 .4. 기존의 입출력 방법과 통합되어야 한다

▶ MIDP 에서 정의하는 두 가지 레벨의 API1. 상위 레벨 API: 비즈니스 어플리케이션과 같은 , 높은 수준의

이식성 (Portability) 를 요구하는 어플리케이션의 제작에 사용될 API

2. 하위 레벨 API: 게임 어플리케이션과 같은 , 특정한 목적에 맞게 사용이 가능한 어플리케이션의 제작에 사용될 API

29Mobile Programming

Page 30: MIDlet  프로그램 구조 및   생명 주기

유저 인터페이스 유저 인터페이스 (2)(2)

30

핵심적인 유저 인터페이스 API 의 클래스 계층도 :

Mobile Programming

Page 31: MIDlet  프로그램 구조 및   생명 주기

유저 인터페이스 유저 인터페이스 (3)(3)

▶ 두 가지 디스플레이 가능 클래스 :▷ Canvas 클래스 :

Canvas 클래스는 게임과 같은 하위 레벨 API 를 사용하는 어플리케이션을 위한 스크린을 제공한다 .

▷ Screen 클래스 : 텍스트 박스 , 리스트 , 등의 상위 레벨 API 를 위한 최상위 추상화를

제공 Screen 클래스를 상속하는 List, TextBox, Alert 와 같은 클래스들은

사전에 정의된 구조를 사용할 수 있는 컴포넌트들 사전에 정의된 구조를 사용할 수 없는 TextField, ImageItem, Gauge

등의 클래스들은 Screen 클래스를 상속하는 Form 클래스를 상속하도록 설계되어 있다

31Mobile Programming

Page 32: MIDlet  프로그램 구조 및   생명 주기

CLDC/MIDP CLDC/MIDP 아키텍처아키텍처

32Mobile Programming

Page 33: MIDlet  프로그램 구조 및   생명 주기

CLDC/MIDP CLDC/MIDP 표준 패키지표준 패키지

33

패키지 이름 설 명

java.io 데이터 스트림을 통한 스트림 입출력 제공

java.lang 자바언어에 관련된 본질적인 클래스 제공

java.util 가장 기본적인 유틸리티 클래스 제공 ( 타이머 포함 )

javax.microedition.io CLDC 의 GCF(Generic Connection Framework) 와 확장된 네트워킹 API 제공

javax.microedition.rms

MIDlet 이 핸드폰의 영속성 저장장치에 데이터를 저장하고 추출할 수 있는 API 제공

javax.microedition.midlet

MIDlet 에 대한 정의와 MIDlet 과 애플리케이션 관리 소프트웨어와의 상호작용에 대해 정의

javax.microedition.lcdui

모바일 인포메이션 디바이스 (MID) 를 위해 최적화된 사용자 인터페이스 API

Mobile Programming

Page 34: MIDlet  프로그램 구조 및   생명 주기

MIDletMIDlet 프로그램의 기본 구조 프로그램의 기본 구조 (1)(1)

▶ 텍스트 기반 미들렛 프로그램▷ 화면 출력 제한적이다 .▷ 표현이 자유롭지 못하다 .▷ MIDlet 클래스를 상속한다 .

▶ 그래픽 기반 미들렛 프로그램▷ 표현이 자유롭다 . ▷ MIDlet 클래스 , Canvas 클래스

상속한다

34Mobile Programming

텍스트 기반 그래픽 기반

Page 35: MIDlet  프로그램 구조 및   생명 주기

MIDletMIDlet 프로그램의 기본 구조 프로그램의 기본 구조 (2)(2)

▶ 텍스트 기반 MIDlet 프로그램 구조

35Mobile Programming

import javax.microedition.MIDlet.*; // import ① 문import javax.microedition.lcdui.*;

public class 클래스명 MIDlet extends MIDlet { // ② 클래스선언 display display; public 클래스명 MIDlet() { // ③ 생성자

display = Display.getDisplay(this); } public void startApp() { // ④ 실행 상태

...display.setCurrent(Displable nextDisplable);

} public void pauseApp() { // ⑤ 정지 상태 ... } public void destroyApp(boolean unconditional) {

// ⑥ 종료 상태...

}}

Page 36: MIDlet  프로그램 구조 및   생명 주기

MIDletMIDlet 프로그램의 기본 구조 프로그램의 기본 구조 (3)(3)

▶ import 문▷ MIDP 라이브러리로 제공하는 패키지에는 포함된 클래스를

사용하려면 소스 코드 맨 앞에 import 문으로 선언해야 한다 .

36Mobile Programming

Page 37: MIDlet  프로그램 구조 및   생명 주기

MIDletMIDlet 프로그램의 기본 구조 프로그램의 기본 구조 (4)(4)

▶ 클래스 선언▷ 클래스를 선언할 때는 MIDlet 클래스를 반드시 상속받아야 한다 .

▷ MIDlet 클래스에 정의된 응용 프로그램 관리자가 미들렛 프로그램을 생성하고 상태 변화를 관리한다 .

▷ 응용 프로그램 관리자는 미들렛의 상태 변화에 따라 적절한 메소드를 호출하여 상태 변경을 알려 줌으로써 미들렛 프로그램을 실행 , 일시정지 , 완전 종료시킬 수 있다 .

▶ 생성자▷ 클래스를 객체로 생성할 때 처음 한번만 실행되는 메소드로 , 꼭 필요하지는 않다 .

▷ 멤버 변수나 객체를 초기화하는 데 주로 이용된다 .

▷ 반환형이 없으며 , 클래스 이름과 동일해야 한다 .37Mobile Programming

Page 38: MIDlet  프로그램 구조 및   생명 주기

MIDletMIDlet 프로그램의 기본 구조 프로그램의 기본 구조 (5)(5)

▶ 실행 상태▷ 미들렛이 실행되는 상태다 . ▷ 미들렛을 정지 상태에서 실행 상태로 이동할 때 startApp() 를

호출한다 .▷ 정지 상태에 있을 때만 호출된다 .

▶ 정지 상태▷ 공유 자원을 해제해 주어야 한다 .▷ 미들렛을 처음 실행하면 정지 상태 , 자원 할당이 가능하면

startApp() 를 호출하여 실행 상태로 이동한다 . ▷ 실행 상태에서만 pauseApp() 를 호출할 수 있다 .

38Mobile Programming

Page 39: MIDlet  프로그램 구조 및   생명 주기

MIDletMIDlet 프로그램의 기본 구조 프로그램의 기본 구조 (6)(6)

▶ 종료 상태▷ 미들렛이 종료되기 전 기본 설정이나 상태 저장 등 필요한 정보를

저장하고 모든 자원을 해제하는 상태다 . ▷ 미들렛이 실행된 상태거나 정지된 상태에서만 destroyApp() 를

호출할 수 있다 .

39Mobile Programming

Page 40: MIDlet  프로그램 구조 및   생명 주기

MIDletMIDlet 프로그램의 기본 구조 프로그램의 기본 구조 (7)(7)

▶ 그래픽 기반 MIDlet 프로그램 구조

40Mobile Programming

import javax.microedition.midlet.*;import javax.microedition.lcdui.*;

public class 클래스명 MIDlet extends MIDlet { Display display; 클래스명 Canvas canvas_; public 클래스명 MIDlet() {

display = Display.getDisplay(this); canvas_ = new 클래스명 Canvas(); } public void startApp() { display.setCurrent(canvas_); } public void pauseApp() { ... } public void destroyApp(boolean unconditional) { ... }}

클래스명 MIDlet.java클래스명 MIDlet.java

Page 41: MIDlet  프로그램 구조 및   생명 주기

MIDletMIDlet 프로그램의 기본 구조 프로그램의 기본 구조 (8)(8)

▶ 그래픽 기반 미들렛 프로그램 구조 ( 계속 )

41Mobile Programming

import javax.microedition.lcdui.*;

class 클래스명 Canvas extends Canvas { public 클래스명 Canvas() { ... } public void paint(Graphics g) { ... }}

클래스명Canvas.java

클래스명Canvas.java

Page 42: MIDlet  프로그램 구조 및   생명 주기

MIDletMIDlet 프로그램의 기본 구조 프로그램의 기본 구조 (9)(9)

▶ Canvas 클래스 객체화▷ Canvas 클래스를 상속받아 ‘클래스명 Canvas’클래스에서

paint() 메소드에 Graphics 객체를 이용하여 원하는 형태를 구현한다 .

▶ 클래스 선언▷ Canvas 클래스를 상속받아‘클래스명 Canvas’클래스를 선언한다 . ▷ Canvas 클래스는 낮은 수준의 이벤트를 처리하고 , 출력 장치로

이동할 때는 그래픽을 호출하는 응용 프로그램을 작성한다 .

▶ paint() 메소드▷ Canvas 를 렌더링하는 메소드다 . ▷ 그래픽을 화면에 출력하려면 반드시 구현해야 한다 .▷ paint() 메소드 블록에 정의된 내용이 그대로 화면에 표시된다 .

42Mobile Programming

Page 43: MIDlet  프로그램 구조 및   생명 주기

간단한 간단한 MIDletMIDlet 프로그램 예제 프로그램 예제 (1)(1)

▶ 문자열 출력 프로그램

43Mobile Programming

실행 결과 화면

01 import javax.microedition.midlet.MIDlet;02 import javax.microedition.lcdui.*;0304 public class FirstMIDlet extends MIDlet{05 private Display display;06 private TextBox textbox;0708 public FirstMIDlet() {09 display = Display.getDisplay(this);10 textbox = new TextBox("First MIDlet", "첫 번째 미들렛 ", 20, TextField.ANY);11 }12 public void startApp() {13 display.setCurrent(textbox);14 }15 public void pauseApp() { }16 public void destroyApp(boolean unconditional) { }17 }

FirstMIDlet.javaFirstMIDlet.java

Page 44: MIDlet  프로그램 구조 및   생명 주기

간단한 간단한 MIDletMIDlet 프로그램 예제 프로그램 예제 (2)(2)

▶ 도형과 문자열 출력 프로그램

44Mobile Programming

실행 결과 화면

01 import javax.microedition.midlet.*;02 import javax.microedition.lcdui.*;0304 public class SecondMIDlet extends MIDlet {05 private Display display;06 private SecondCanvas canvas_;0708 public SecondMIDlet() {09 display = Display.getDisplay(this);10 canvas_ = new SecondCanvas();11 }12 public void startApp() {13 display.setCurrent(canvas_);14 }15 public void pauseApp() { }16 public void destroyApp(boolean unconditional) { }17 }18

SecondMIDlet.javaSecondMIDlet.java

Page 45: MIDlet  프로그램 구조 및   생명 주기

간단한 간단한 MIDletMIDlet 프로그램 예제 프로그램 예제 (3)(3)

▶ 도형과 문자열 출력 프로그램 ( 계속 )

45Mobile Programming

19 class SecondCanvas extends Canvas {20 private Font largeFont;21 String explainText[] = {"[ 게임설명 ]", " 본 게임은“ , 22 " 커서를 이용하여 ", "1 분 동안 4 곳의“ , 23 " 다른 부분을 찾는 ", " 게임입니다 ."};22 public SecondCanvas(){23 largeFont = Font.getFont(Font.FACE MONOSPACE, Font.STYLE_PLAIN, Font.SIZE_LARGE);24 }25 public void paint(Graphics g) {26 g.setColor(255, 255, 255);27 g.fillRect(0, 0, getWidth(), getHeight());28 g.setColor(0, 0, 0);29 g.fillRoundRect(60, 60, 120, 150, 20, 20);30 g.setColor(255, 255, 255);31 g.setFont(largeFont);

SecondMIDlet.javaSecondMIDlet.java

Page 46: MIDlet  프로그램 구조 및   생명 주기

간단한 간단한 MIDletMIDlet 프로그램 예제 프로그램 예제 (4)(4)

▶ 도형과 문자열 출력 프로그램 ( 계속 )

46Mobile Programming

SecondMIDlet.javaSecondMIDlet.java32 g.drawString(explainText[0], getWidth()/2, 65, Graphics.TOP | Graphics.HCENTER);33 int y = 95;34 for(byte i=1; i < explainText.length; i++){35 g.drawString(explainText[i], 65, y, Graphics.TOP | Graphics.LEFT);36 y+=20;37 }38 }39 }