---
title: "3. 주요 기능 규격"
---

이 장에서는 표준 플랫폼의 주요 기능 규격을 정의한다.

## 3.1. 응용프로그램 머신 코드 규격

플랫폼은 머신 코드 형태의 응용프로그램을 다운로드 받아 수행해야 한다. 자바 응용 프로그램의 경우에는 자바 중간코드를 AOTC를 통해 머신 코드를 생성할 수 있다.

세부 머신 코드 규격은 추후 정의 할 수 있다.

## 3.2. 다중 응용프로그램 수행

플랫폼은 동시에 여러 개의 응용프로그램이 메모리에 적재되어 수행 될 수 있는 환경 을 지원해야 한다. 또한, 플랫폼은 여러 개의 응용프로그램을 동시에 실행할 수 있어 야 한다. 플랫폼은 여러 개의 응용프로그램 간 실행 우선 순위를 두고 매 순간 실행 가능한 가장 높은 우선 순위의 응용프로그램을 실행해야 한다.

여러 응용프로그램을 수행 할 경우 각 응용프로그램은 독립적으로 수행 되어야 한다.

독립적인 응용프로그램간 통신을 지원하기 위하여 공유 메모리와 이벤트를 전달 할 수 있는 방법을 제공해야 한다.

플랫폼은 플랫폼이 지원하는 프로그래밍 언어로 작성된 응용프로그램의 생명주기를 관 리할 수 있어야 한다.

## 3.3. 지원 프로그래밍 언어

플랫폼은 응용 프로그램 개발자가 자바나 C 언어로 플랫폼의 기본 API(Basic API) 를 사용하여 응용 프로그램을 작성할 수 있도록 지원해야 한다. 단, CLDC/MIDP 채택시에 는 Extended API를 사용하여 응용 프로그램을 작성할 수 있도록 지원해야 한다.

### 3.3.1. C 언어 지원

플랫폼은 기본 API에 정의된 C 언어용 API와 C 언어 문맥(Semantic)을 지원해야 한 다.

### 3.3.2. 자바 언어 지원

플랫폼은 기본 API에 정의된 자바 언어용 API와 자바 언어 문맥(Semantic)을 지원해 야 한다. 단, CLDC/MIDP 채택시에는 Extended API도 지원해야 한다.

## 3.4. 플랫폼 보안

플랫폼은 다음의 세가지 보안수준을 정의 한다. 플랫폼은 보안수준에 따라 API와 디렉 토리에 대한 접근을 제한해야 한다.

- PUBLIC 수준 가장
낮은 수준의 보안 레벨로, 보통 신뢰할 수 없는 일반 개발자가 제공하는 응용프 로그램에 적용된다. 따라서, 이 수준에서는 단말기에 영향을 미치거나, 개인 정보 등에 접근을 막아야 한다.

- CP(Contents Provider) 수준
이미 알려진 CP 들은 어느 정도 신뢰 할 수 있다고 보고, 단말기에 심각한 영향을 미 치지 않는 범위 내에서 접근을 허용해야 한다.

- 시스템(System) 수준
완전히 신뢰할 수 있는 것으로 보고, 모든 접근을 허용해야 한다.

### 3.4.1. API 보안

API별 보안 지원을 위해서 특정 API 그룹을 보안 대상 그룹으로 구분하여 해당 그룹 별로 보안 수준을 지정해야 한다. 플랫폼은 이때 각 그룹에 대해서 다음의 접근 수준 을 지정해야 한다.

- NO ACCESS : 허용하지 않음.
- READ ONLY : 읽기만 허용함.
- WRITE ONLY : 쓰기만 허용함.
- READ/WRITE : 읽기, 쓰기 모두 허용함.
API 그룹의 접근 수준과 보안 수준 설정에 대한 정책은 플랫폼 이식 시점에 결정되어 적용 된다.

### 3.4.2. 디렉토리 보안

플랫폼은 다음의 세가지 디렉토리 접근 방식을 지원해야 한다,

- 개인 디렉토리(Private Directory)
응용프로그램 관리자를 제외하고는 해당 응용프로그램 자신만이 접근할 수 있는 디렉토리이다.

- 응용프로그램 공유 디렉토리(Application Shared Directory)
이미 서로 합의된 응용프로그램들 간에 공유하기 위한 디렉토리이다.

- 시스템 공유 디렉토리(System Shared Directory)
응용프로그램에 관계없이 공유 되는 디렉토리이다.

## 3.5. API 추가/갱신 지원

플랫폼은 API 를 무선망을 통해서 추가/갱신할 수 있다. 추가/갱신 된 API는 지속적으로 유지 되어야 한다. 이를 지원하기 위하여 플랫폼은 API 추가/갱신에 따른 버전 관 리 및 설치/삭제 기능을 가져야 한다.

플랫폼이 무선망을 통한 API 추가/갱신이 가능하도록 지원하는 경우 부속서 7.2에 명시한 API 규격에 따라 지원하여야 한다.

플랫폼은 추가/갱신된 API에 대해서도 API 보안수준 정책을 동일하게 적용해야 한다.

## 3.6. 메모리 관리

플랫폼은 응용프로그램이 사용하는 HEAP 메모리를 다음과 같이 관리해야 한다.

- 자동 메모리 해제
하나의 응용프로그램이 종료되면, 해당 프로그램과 관련된 모든 메모리는 플랫폼에 반 환해야 한다. 따라서, 이벤트 등 각종 동적으로 사용된 메모리는 자동으로 모두 반환 해야 한다.

- 메모리 컴팩션(Compaction)
플랫폼에서 동적으로 사용하는 메모리를 할당/해제 할 때 메모리 단편화 (fragmentation)를 줄이기 위해 메모리 컴팩션을 할 수 있다.

- 자바 가비지 컬렉션(Garbage Collection)
플랫폼은 자바 언어 문맥에 따라 가비지 컬렉션을 지원해야 한다.

- 자바 스택(Stack)
플랫폼은 자바 응용프로그램 별로 스택을 할당/해제 할 수 있어야 하며, 각 응용프로그램별 스택의 크기를 동적으로 변화시킬 수 있다. 자바 응용프로그램이 메모리 한계 를 넘는 스택 할당 요청을 했을 경우 플랫폼은 예외 상황(exception)을 응용프로그램 에 전달 해야 하며, 예외상황 발생 후 플랫폼은 정상 동작해야 한다.

- 공유 메모리 지원
응용프로그램들이 사용하는 메모리는 서로 독립적이어야 하고, 플랫폼은 응용프로그램 간에 공유할 수 있는 메모리를 지원해야 한다. 단, C 언어는 언어적 특성을 따른다.

이때 플랫폼은 공유하는 모든 응용프로그램이 종료될 경우 자동으로 공유 메모리를 해 제 해야 한다.

## 3.7. 응용프로그램 관리

플랫폼은 다음의 기능을 제공해야 한다.

### 3.7.1. 관리 기능

- 응용프로그램 수행 시 날짜 제한, 회수 제한 설정에 따라 기동 여부를 판단해야 한다.
- 응용프로그램 설치/삭제 기능을 제공해야 한다.
- 응용프로그램 정지 기능을 제공 할 수 있다. 정지 기능은 실행 프로그램만 삭
제하고 관련 데이터 파일을 남겨 두어 추후 다시 프로그램을 설치하면 이전 데이터를 활용 할 수 있도록 하는 기능이다.
- API 추가/갱신 기능을 제공할 수 있다.
- 응용프로그램 강제 종료 기능을 제공해야 한다.

### 3.7.2. 응용프로그램 다운로드 기능

플랫폼은 응용프로그램을 다운로드 받는 기능을 지원 하고, 다운로드 중 오류가 발생 할 경우 초기 상태로 복구해야 한다.

무선망 뿐만 아니라 시리얼 인터페이스를 통한 다운로드 기능이 지원되어야 한다.

## 3.8. 다국어 지원

### 3.8.1. 유니코드 지원

플랫폼은 자바 응용프로그램을 위해 유니코드를 지원해야 하며,. 입출력 시 문자열은 지역 특성에 맞게 해당되는 문자 코드로 변환해야 한다.

한국의 경우는 유니코드 문자열과 EUC_KR 문자셋(Character Set) 문자열로 상호 변환 해야 한다.

### 3.8.2. 로케일 지원

플랫폼은 C 응용프로그램에대해 지역정보 (locale) 에 따라 참조하여 지원하는 문자셋 으로 인식해야 한다. 한국의 경우는 EUC_KR 문자셋을 이용해야 한다.

### 3.8.3. 확장 유니코드

EUC_KR 문자셋에는 유니코드에 대응되지 않는 그래픽 문자가 있으며, 이를 지원하기 위해서 유니코드 사양에서 Private Use(0xE000-0xF8FFF)영역을 사용하는 확장된 유 니코드를 사용 할 수 있다. 이에 대한 상세 내역은 부속서 7.2를 참조한다.

## 3.9. CLDC/MIDP 지원

본 규격에서 플랫폼은 CLDC/MIDP 를 지원할 수 있으나, 2003년 12월 31일 이후에는 필수적으로 CLDC/MIDP를 지원해야 한다. CLDC/MIDP를 지원하고자 할 경우 아래 소 절을 준수해야 하며. CLDC와 MIDP는 반드시 함께 지원되어야 한다.

CLDC/MIDP가 선택 규격일 경우에는 3장의 주요 기능 규격을 선택적으로 만족할 수 있지만, CLDC/MIDP가 필수 규격으로 제정될 경우에는 3장의 주요 기능 규격을 반드 시 충족시켜야 한다.

### 3.9.1. CLDC 지원

CLDC 규격은 Sun Microsystems 사의 [CLDC 규격 1.1](../cldc/index.md) (JSR-139)을 기준으로 해야 하며, 플랫폼은 바이너리 코드의 실행을 기반으로 하고 있으므로, CLDC 규격에서 정의하는 버추얼머신의 기능은 플랫폼 엔진에서 수용해야 한다. 단, CLDC 규격에서 바이트코드와 코드 Verrification 처리는 플랫폼의 의미를 AOTC를 포함하는 것으로 해 석하여 처리하기로 규정한다. (이와 관련하여 CLDC 규격서 5.2.1.1 Verification process의 Phase 2: In -device verification에서 “In-device”의 정의를 플랫폼과 AOTC를 포함하는 것으로 한다.) CLDC를 지원할 경우 규격서 “5.2.1 Core System (java.lang)”, “5.2.2 High Level IO (java.io)”, “5.2.3 Utilities (java.util)”은 CLDC Core API와 호환되도록 대체한다.

### 3.9.2. MIDP 지원

MIDP 규격은 Sun Microsystems 사의 [MIDP 규격 2.0](../midp/index.md) (JSR-118)을 기준으로 해야한다.

### 3.9.3. Extended API

본 규격에서 CLDC/MIDP 의 API를 Extended API로 정의하며, 필수 규격화 될 경우에 는 Basic API로 편입히기로 한다.

### 3.9.4. Basic API와의 상호운용성

Basic API와의 상호운용성 확보는 CLDC/MIDP가 추후 필수 규격화 되는 시점에서 만 들어질 규격에서 구체적인 방안을 제시하도록 한다.
