Java 2 Micro Edition (J2ME) 은 휴대전화나 PDA 같은 이동통신 기기등의 가전제품을 목표로 하고 있다. 그래서 초소형 장치에서 작은 장치에 이르는 이른바 소형 디바이스 들이 Java 를 사용할 수 있도록 지원하는 플랫폼이다.
1. 구성 ¶
- J2ME는 Configuration과 Profile로 구성되어 있다. (아래 "Configuration과 Profile" 참고)
- PDA 등에서 사용되는...
- Configuration : Connected Device Configuration (CDC)
- Profile : Foundation Profile
- Configuration : Connected Device Configuration (CDC)
- 휴대전화와 같은 매우 제한적이 하드웨어에서 사용되는...
- Configuration : Connected Limited Device Configuration (CLDC)
- Profile : Mobile Information Device Profile (MIDP)
실재로 CLDC와 MIDP가 포팅되어 있는 최신 휴대전화는 다음과 같은 구조를 이루고 있다. - Configuration : Connected Limited Device Configuration (CLDC)
그림을 보면 맨 아래에 MID, 즉 휴대전화의 하드웨어 부분이 있고 그 위에는 Native System Software가 존재하며 그 상위에 CLDC가, 그리고 MIDP에 대한 부분이 나오는데 이 부분을 살펴보면, MIDP Application과 OEM-Specific Classes로 나뉘어 있는 것을 알 수 있다. 여기서의 OEM-Specific Classes라는 것은 말 그대로 OEM(Original Equipment Manufacturing) 주문자의 상표로 상품을 제공하는 것이다. 즉, 다른 휴대전화에서는 사용할 수 없고, 자신의(같은 통신 회사의) 휴대전화에서만 독립적으로 수행될 수 있도록 제작된 Java또는 Native로 작성된 API이다. 이는 자신의(같은 통신 회사의) 휴대전화의 특성을 잘 나타내거나 또는 MIDP에서 제공하지 않는 특성화된 클래스 들로 이루어져 있다. 지금까지 나와있는 많은 MIDP API들에도 이런 예는 많이 보이고 있으며, 우리나라의 SK Telecom에서 제공하는 SK-VM에도 이런 SPEC을 가지고 휴대전화의 특성에 맞는 기능, 예를 들어 진동 기능이나, SMS를 컨트롤하는 기능 들을 구현하고 있다. 그림에서 보듯이 CLDC는 MIDP와 OEM-Specific Classes의 기본이 되고 있다.
2. Configuration과 Profile ¶
퍼스널 자바와 임베디드 자바는 J2ME 플랫폼이 등장하기 이전부터 임베디드 시장을 목표로 한 자바 플랫폼이었다. 인터넷 셋탑 박스와 같은 나름대로의 성과도 있었지만, pJava와 eJava는 별로 시장의 주목을 받을 만한 사건을 기록한 적이 없었다. 그것은 기본적으로 선 마이크로시스템즈가 하드웨어 설계 및 제조와 관련해서는 그다지 내세울 만한 무기가 없었기 때문이었다고 해도 별 무리가 없을 것이다. 즉, 하드웨어 업체의 적극적인 지지 없이는 자바의 임베디드 시장 진출은 요원한 과제였다.
그리고, 수많은 소비자/임베디드 디바이스들에 공통적으로 적용할 수 있는 플랫폼을 개발한다는 것도 자체적으로 한계가 있었다. 다양한 하드웨어, 다양한 운영체제, 그리고 전혀 호환성 없는 유저 인터페이스까지, 이 모든 차이점을 극복하면서 기존의 J2SE 기반의 자바와의 호환성까지 유지할 수 있는 솔루션은 불가능하다는 문제인식이 있었다. 그래서 등장한 개념이 컨피규레이션과 프로파일로의 플랫폼 분할이다.
컨피규레이션이란 자바 가상머신과 코어 API들에 대한 명세를 의미하고, 프로파일은 그 상위의 클래스 라이브러리, 즉 표준 API 집합에 대한 명세를 의미한다. 이러한 개념적인 분할이 필요한 이유는 메모리와 CPU등의 크기와 성능이라는 측면에서의 요구사항이 동일한 디바이스들의 집합을 하나로 묶어서 컨피규레이션을 정의하고, 이러한 컨피규레이션을 바탕으로 각 디바이스들의 기능, 혹은 버티컬 시장의 요구사항에 맞추어 프로파일을 정의함으로써, 플랫폼의 통일성과 다양성을 동시에 만족시킬 수 있기 때문이다.