460 likes | 656 Views
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.)”.
E N D
MIDlet 프로그램 구조 및 생명 주기 Lecture #3
강의 목차 • J2ME 플랫폼 개요 • MIDlet 프로그램의 기본 구조를 익힌다. • MIDP 2.0 패키지의 종류를 알아본다. • 문자열을 출력하는 간단한 MIDlet 프로그램을 작성한다. • 문자열 출력을 응용해 게임 방법을 설명하는 화면을 만들어 본다. Mobile Programming
J2ME(Java 2 Micro Edition) 플랫폼 “One size doesn't fit all” “WORA (Write Once Run Anywhere.)” Mobile Programming
J2ME(Java 2 Micro Edition) 플랫폼 “WORA (Write Once Run Anywhere)” Personal Java - 소형기기에 적합한 spec. - J2ME CDC의 모태 Embedded Java - Personal Java 보다 협소적 환경의 spec. 한계를 극복하기 위한 방안 - J2ME에서는 각 디바이스와 운영환경에 맞게 플랫폼을 분할 (플랫폼 분할을 위해 configuration과 profile 개념 도입) Mobile Programming
Configuration and Profile (1) • Configuration and Profile : • J2ME의 핵심적 요소 • 플랫폼의 통일성과 다양성을 만족 시킴 • VM과 클래스 라이브러리를 특정한 장치 그룹에 최적화하는 것 • 현재 CLDC와 CDC Configuration으로 정의 • CLDC 디바이스 군: • - 16 비트 또는 32 비트 CPU • - 160KB~512KB 크기의 메모리 • (RAM과 ROM 포함) • - 제한된 전력 또는 배터리 파워 공급 • 낮은 네트웍 전송률 등의 기기 사양 • - 핸드폰, 양방향 삐삐, 또는 PDA 등과 • 같은 기기 • CDC 디바이스 군 • - 32 비트 CPU • - 2MB 이상의 메모리 • (RAM과 ROM 포함) • - 낮은 네트웍 전송률 • (9600 bps 보다 낮을 수 있음) • - PDA, 가전 기기, 자바폰, 디지털 셋톱 • (Set-top) 박스 등과 같은 기기 Mobile Programming
Configuration and Profile (2) • J2ME 컨피규레이션과 프로파일 및 임베디드 자바 기술 Mobile Programming
Configuration and Profile (3) Mobile Programming
Configuration and Profile (4) • Configuration : • java.io • java.net • java.util • java.lang • Configuration이 포함하고 있는 명세 : • 자바언어에 대한 명세 : 부동소수점 지원 여부 등 • 가상 머신에 대한 명세 : KVM, pJava, eJava • Core API에 대한 명세 : java.* 패키지 • Profile : • 특정 device 및 산업군에 맞는 API에 대한 명세 • 이식성(Portability)을 지원 Mobile Programming
CLDC/MIDP 구조 Mobile Programming
CLDC (1) • KVM (Kilobyte or Kauai Virtual Machine) • NTT 도코모와 3Com에서 탑재 • kilobyte 단위로 디자인 • 메모리 풋프린트는 50KB, 클래스 라이브러리 포함 128KB Mobile Programming
CLDC (2) • CLDC(Connected Limited Device Configuration) 명세서 • 자바 언어 및 가상 머신의 특징 • 코어 자바 라이브러리(java.*로 시작하는 패키지들) • 네트워킹과 입출력 • 보안과 국제화 • CLDC 디바이스 목표 • 128-512K의 메모리 여유 공간 • 16-32비트 프로세서 • 저전력 소모, 주로 배터리 사용 • 제한된 대역폭(9600 bps 이하)의 네트워크 연결성 Mobile Programming
CLDC (3) • CLDC의 특징 • 부동 소수점을 지원 안 함. • 마무리(finalization)을 지원 안 함. • 에러 처리가 제한적이다. • JNI(Java Native Interface)를 지원 안 함. • 리플렉션을 지원 안 함. • 쓰레드 그룹과 데몬 쓰레드를 지원 안 함. • 사용자 정의 클래스 로더를 생성할 수 없다. • 약한 참조(weak reference)를 지원 안 함. • 클래스 파일 포맷이 다르고, 클래스 룩업, 클래스 로딩과 링킹 방법이 다름 • 모래상자 보안 모델을 사용한다. • 전혀 다른 네트워킹 및 입출력 모델을 가지고 있다. • 새로운 어플리케이션 모델을 가정하고 있다. Mobile Programming
CLDC (4) • 클래스 파일 검증 과정 Mobile Programming
CLDC (5) • GCF (Generic Connection Framework) Mobile Programming
CLDC (6) • CLDC API Mobile Programming
MIDP(Mobile Information Device Profile) (1) • MIDP 명세서 정의 • 어플리케이션 모델 • 유저 인터페이스와 이벤트 핸들링 • 영속적 저장공간 • 네트워킹, 타이머 지원 • 디스플레이 요구사항 • 96x54 이상의 스크린 사이즈 • 1비트 이상의 디스플레이(모노크롬) • 종횡비(aspect ratio)가 약 1:1에 근접 • 입출력 요구사항 • 한 손, 혹은 두 손으로 입력가능한 입출력 메커니즘 • 메모리 요구사항 • MIDP 컴포넌트를 위한 128K의 비휘발성 메모리 공간 • 애플리케이션이 생성하는 데이터의 저장을 위한 8K의 비휘발성 메모리 공간 • 자바 런타임을 위한 32K의 휘발성 메모리 공간 • 네트워킹 요구사항 • 양방향이고, 무선이며, 제한된 대역폭에, 간헐적으로 연결될 수 있음 Mobile Programming
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 Mobile Programming
JAM과 신개념 어플리케이션 모델(1) • JAM (Java Application Manager) • MIDlet은 자바 애플릿과 유사한 방식으로 실행 • MIDlet을 다운로드하여 설치, 업그레이드, 실행, 삭제하는 역할 • JAM의 기본 기능 Mobile Programming
JAM과 신개념 어플리케이션 모델 (2) JAM 을 통한 어플리케이션 설치 과정 : Mobile Programming
MIDlet과 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
MIDlet Attributes Mobile Programming
어플리케이션 디스크립터(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 Mobile Programming
MIDlet 프로그램의 생명주기 (1) • MIDlet 프로그램의 생명주기 정지 종료 실행 Mobile Programming
MIDlet 프로그램의 생명주기 (2) • 정지 • MIDlet 프로그램이 초기화되거나 일시정지(Paused)된 상태로 공유 리소스를 점유하지 않는다. • MIDlet을 처음 실행하면 응용 프로그램 관리자는 일시정지 상태로 들어간다. 그런 뒤 자원 할당이 가능하면 startApp()를 호출하여 실행 상태로 바꾼다. • 실행 • MIDlet 프로그램이 실행(Active)되는 상태다. • 응용 프로그램 관리자가 startApp() 메소드를 요청하거나 미들렛이 esumeRequest()를 응용 프로그램 관리자에게 요청해서 startApp()가 호출될 때 실행 상태로 들어간다. • 종료 • MIDlet 프로그램이 종료(Destroyed)되는 상태로, 공유 리소스를 해제한다. • 일시정지나 실행 상태에서 destroyApp()를 호출하면, 응용 프로그램 관리자는 종료 상태로 들어가서 프로그램을 종료한다. Mobile Programming
MIDlet 프로그램의 생명주기 (3) • startApp() : • 필요한 리소스에 대한 점유 획득. Active 상태로 전이 • pauseApp() : • 임시적인 리소스들에 대한 점유 해제. Pause 상태로 전이 • destroyApp() : • MIDlet이 종료한 상태. 공유 리소스를 해제한다. • - Destoryed 상태로 전이 MIDlet의 상태 다이어 그램 Mobile Programming
네트워킹 • MIDP 1.0 명세서는 HTTP 1.1 프로토콜의 서브셋을 지원. • MIDP는 javax.microedition.io.HttpConnection을 통해 HTTP 연결을 지원. Mobile Programming
레코드 관리 시스템(RMS) • 데이터를 영속적으로 저장하고 사용하기 위해 RMS (Record Management System) 메커니즘을 제공. • 레코드 기반의 초소형 데이터베이스. • Javax.microedition.rms 패키지를 통해 제공. Mobile Programming
타이머 지원 • 일정한 시간 동안 지정해서 한번만 실행하거나 일정한 간격으로 여러 번 반복적으로 실행하도록 스케쥴링 할 수 있다. • Java.util.Timer • Java.util.TimerTask Mobile Programming
유저 인터페이스 (1) • MIDP 유저 인터페이스 설계 원칙 1. 한 손으로 입력 가능해야 한다. 2. 작은 스크린 사이즈에 적용 가능해야 한다. 3. 포인팅 디바이스가 없는 단말기에 적용 가능해야 한다. 4. 기존의 입출력 방법과 통합되어야 한다 • MIDP에서 정의하는 두 가지 레벨의 API 1. 상위 레벨 API: 비즈니스 어플리케이션과 같은, 높은 수준의 이식성(Portability)를 요구하는 어플리케이션의 제작에 사용될 API 2. 하위 레벨 API: 게임 어플리케이션과 같은, 특정한 목적에 맞게 사용이 가능한 어플리케이션의 제작에 사용될 API Mobile Programming
유저 인터페이스 (2) 핵심적인 유저 인터페이스 API의 클래스 계층도: Mobile Programming
유저 인터페이스 (3) • 두 가지 디스플레이 가능 클래스: • Canvas 클래스: • Canvas 클래스는 게임과 같은 하위 레벨 API를 사용하는 어플리케이션을 위한 스크린을 제공한다. • Screen 클래스: • 텍스트 박스, 리스트, 등의 상위 레벨 API를 위한 최상위 추상화를 제공 • Screen 클래스를 상속하는 List, TextBox, Alert와 같은 클래스들은 사전에 정의된 구조를 사용할 수 있는 컴포넌트들 • 사전에 정의된 구조를 사용할 수 없는 TextField, ImageItem, Gauge 등의 클래스들은 Screen 클래스를 상속하는 Form 클래스를 상속하도록 설계되어 있다 Mobile Programming
CLDC/MIDP 아키텍처 Mobile Programming
CLDC/MIDP 표준 패키지 Mobile Programming
MIDlet 프로그램의 기본 구조 (1) • 텍스트 기반 미들렛 프로그램 • 화면 출력 제한적이다. • 표현이 자유롭지 못하다. • MIDlet 클래스를 상속한다. • 그래픽 기반 미들렛 프로그램 • 표현이 자유롭다. • MIDlet 클래스, Canvas 클래스 상속한다 텍스트 기반 그래픽 기반 Mobile Programming
MIDlet 프로그램의 기본 구조 (2) • 텍스트 기반 MIDlet 프로그램 구조 import javax.microedition.MIDlet.*; // ① import 문 import javax.microedition.lcdui.*; public class 클래스명MIDlet extends MIDlet { // ② 클래스 선언 displaydisplay; public 클래스명MIDlet() { // ③ 생성자 display = Display.getDisplay(this); } public void startApp() { // ④ 실행 상태 ... display.setCurrent(Displable nextDisplable); } public void pauseApp() { // ⑤ 정지 상태 ... } public void destroyApp(boolean unconditional) { // ⑥ 종료 상태 ... } } Mobile Programming
MIDlet 프로그램의 기본 구조 (3) • import 문 • MIDP 라이브러리로 제공하는 패키지에는 포함된 클래스를 사용하려면 소스 코드 맨 앞에 import 문으로 선언해야 한다. Mobile Programming
MIDlet 프로그램의 기본 구조 (4) • 클래스 선언 • 클래스를 선언할 때는 MIDlet 클래스를 반드시 상속받아야 한다. • MIDlet 클래스에 정의된 응용 프로그램 관리자가 미들렛 프로그램을 생성하고 상태 변화를 관리한다. • 응용 프로그램 관리자는 미들렛의 상태 변화에 따라 적절한 메소드를 호출하여 상태 변경을 알려 줌으로써 미들렛 프로그램을 실행, 일시정지, 완전 종료시킬 수 있다. • 생성자 • 클래스를 객체로 생성할 때 처음 한번만 실행되는 메소드로, 꼭 필요하지는 않다. • 멤버 변수나 객체를 초기화하는 데 주로 이용된다. • 반환형이 없으며, 클래스 이름과 동일해야 한다. Mobile Programming
MIDlet 프로그램의 기본 구조 (5) • 실행 상태 • 미들렛이 실행되는 상태다. • 미들렛을 정지 상태에서 실행 상태로 이동할 때 startApp()를 호출한다. • 정지 상태에 있을 때만 호출된다. • 정지 상태 • 공유 자원을 해제해 주어야 한다. • 미들렛을 처음 실행하면 정지 상태, 자원 할당이 가능하면 startApp()를 호출하여 실행 상태로 이동한다. • 실행 상태에서만 pauseApp()를 호출할 수 있다. Mobile Programming
MIDlet 프로그램의 기본 구조 (6) • 종료 상태 • 미들렛이 종료되기 전 기본 설정이나 상태 저장 등 필요한 정보를 저장하고 모든 자원을 해제하는 상태다. • 미들렛이 실행된 상태거나 정지된 상태에서만 destroyApp()를 호출할 수 있다. Mobile Programming
MIDlet 프로그램의 기본 구조 (7) • 그래픽 기반 MIDlet 프로그램 구조 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 Mobile Programming
MIDlet 프로그램의 기본 구조 (8) • 그래픽 기반 미들렛 프로그램 구조 (계속) import javax.microedition.lcdui.*; class 클래스명Canvas extends Canvas { public 클래스명Canvas() { ... } public void paint(Graphics g) { ... } } 클래스명Canvas.java Mobile Programming
MIDlet 프로그램의 기본 구조 (9) • Canvas 클래스 객체화 • Canvas 클래스를 상속받아 ‘클래스명Canvas’클래스에서 paint() 메소드에 Graphics 객체를 이용하여 원하는 형태를 구현한다. • 클래스 선언 • Canvas 클래스를 상속받아‘클래스명Canvas’클래스를 선언한다. • Canvas 클래스는낮은 수준의 이벤트를 처리하고, 출력 장치로 이동할 때는 그래픽을 호출하는 응용 프로그램을 작성한다. • paint() 메소드 • Canvas를 렌더링하는 메소드다. • 그래픽을 화면에 출력하려면 반드시 구현해야 한다. • paint() 메소드 블록에 정의된 내용이 그대로 화면에 표시된다. Mobile Programming
간단한 MIDlet 프로그램 예제 (1) • 문자열 출력 프로그램 FirstMIDlet.java 01 import javax.microedition.midlet.MIDlet; 02 import javax.microedition.lcdui.*; 03 04 public class FirstMIDlet extends MIDlet{ 05 private Display display; 06 private TextBox textbox; 07 08 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 } 실행 결과 화면 Mobile Programming
간단한 MIDlet 프로그램 예제 (2) • 도형과 문자열 출력 프로그램 SecondMIDlet.java 01 import javax.microedition.midlet.*; 02 import javax.microedition.lcdui.*; 03 04 public class SecondMIDlet extends MIDlet { 05 private Display display; 06 private SecondCanvas canvas_; 07 08 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 실행 결과 화면 Mobile Programming
간단한 MIDlet 프로그램 예제 (3) • 도형과 문자열 출력 프로그램 (계속) SecondMIDlet.java • 19 class SecondCanvas extends Canvas { • 20 private Font largeFont; • String explainText[] = {"[ 게임설명 ]", "본 게임은“, • "커서를 이용하여", "1분 동안 4곳의“, • "다른 부분을 찾는", "게임입니다."}; • 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); • g.setColor(255, 255, 255); • g.setFont(largeFont); Mobile Programming
간단한 MIDlet 프로그램 예제 (4) • 도형과 문자열 출력 프로그램 (계속) SecondMIDlet.java • 32 g.drawString(explainText[0], getWidth()/2, 65, Graphics.TOP | Graphics.HCENTER); • 33 int y = 95; • for(byte i=1; i < explainText.length; i++){ • g.drawString(explainText[i], 65, y, • Graphics.TOP | Graphics.LEFT); • 36 y+=20; • 37 } • 38 } • 39 } Mobile Programming