네트워크 인식 소프트웨어를 구축할 때 설계 과정에서 올바른 데이터 교환 형식을 선택해야 합니다. 특히 모바일 애플리케이션과 임베디드 애플리케이션을 설계할 때는 가볍고 효율적인 특성이 중요한 고려 사항이므로 더욱 신중하게 선택해야 합니다. 그러한 특성을 갖추고 있으면 사용 요구 사항 및 전력 사용을 줄일 수 있고, 잠재적으로 더 나은 성능을 발휘할 수 있으며, 작업 비용을 낮출 수 있으므로 중요합니다.
모 바일 애플리케이션에서 개발자는 일반적으로 자체 제작 데이터 교환 형식이나 XML(Extensible Markup Language)에 의존합니다. 자체 제작 데이터 교환 형식의 장점은 성능 및/또는 컴퓨팅 리소스를 최대화할 수 있도록 특정한 상황에 맞게 조정할 수 있다는 점입니다. XML(Extensible Markup Language)의 장점은 HTTP를 통해 사용하는 경우 사실상 데이터 교환의 표준이라는 점입니다. 또한 XML에서 사용되는 텍스트 기반의 사람이 읽을 수 있는 표시 방법으로 인해 더욱 쉽게 디버깅할 수 있습니다.
이러한 두 가지 방법은 단점도 있습니다. 자체 제작 데이터 교환 형식은 소유 자산의 특성이 있고, 비표준이며, 상호 운용성이 떨어질 가능성이 있는 반면, XML의 경우 데이터 표시용으로는 너무 무겁고 장황하다고 생각될 수 있습니다. 모바일 애플리케이션과 임베디드 애플리케이션의 경우에는 특히 그렇습니다.
|
이 경우 대안으로 고려할 수 있는 것은 경량 데이터 교환 형식인 JSON(JavaScript Object Notation)입니다. 이 문서에서는 Java 플랫폼 Micro Edition(Java ME)에서 데이터 교환에 사용할 수 있는 JSON을 소개합니다.
JSON은 JavaScript(ECMAScript) 스크립팅 언어의 일부로 정의됩니다. JSON은 JavaScript용으로 만들어졌기 때문에 브라우저 기반 애플리케이션에 적합합니다. 그러나 JSON은 JavaScript에서만 사용할 수 있도록 제한되어 있지 않고 경량이라서 일반적으로 모바일 애플리케이션과 임베디드 애플리케이션용으로 매우 좋습니다.
JSON은 두 가지 기본 데이터 구조를 바탕으로 하는 매우 간단한 구문을 사용합니다.
- 이름/값 쌍 모음 및
- 값 순서 목록
JSON 은 텍스트 기반이라 사람이 해독할 수 있으므로 디버깅하기에 좋습니다. JSON은 모든 기본 데이터 형식을 표시할 수 있도록 지원하고 자바 기본 형식의 앞뒤로 구문 분석하는 방법을 제공합니다. 다음 표에서는 JSON 구문 요소를 간단하게 설명합니다.

다음의 JSON 텍스트 코드 단편은 JSON-Time에 대한 요청과 응답을 보여 줍니다. JSON-Time은 지정한 시간대의 현재 시간을 반환하는 유용한 웹 서비스입니다. 다음 예는 현재 미국 시간에 대한 요청과 응답입니다.
Request: |
응답은 간단한 JSON 텍스트 구조인 명명되지 않은 개체로서 제대로 이스케이프된 값, 문자열, 숫자, 부울을 포함합니다.
JSON 은 텍스트 기반 데이터 표시 형식입니다. 모든 텍스트 기반 형식과 마찬가지로 바이너리 데이터는 텍스트로 인코딩해야 합니다. 한 가지 방법은 바이너리 데이터를 기본 64 인코딩으로 변환하는 것이고, 또 한 가지 방법은 바이너리 데이터를 16진수 값 같은 다른 텍스트 인코딩 형식으로 변환하는 것입니다(예: [\uDEAD, \uBEEF,...]).
JSON 지원 데이터 형식
JSON은 모든 기본 숫자 및 문자열 데이터 형식을 지원합니다. 숫자는 정수, 분수, 지수이지만, 부동 소수점/실수 데이터 형식은 CLDC 1.0에서 지원되지 않습니다. 문자열은 모든 유니코드 문자입니다.
다음 문자는 백슬래시 문자를 사용하여 제대로 이스케이프해야 합니다.
- 인용 부호(
\") - 백슬래시(
\\) - 슬래시(
\/) - 백스페이스(
\b) - 폼 피드(
\f) - 줄바꿈 문자(
\n) - 캐리지 리턴(
\r) - 탭(
\t) - 16진수 숫자(
\u4-hex-digits)
JSON 구문에 대한 자세한 내용은 JSON.org를 참조하십시오.
모바일 및 임베디드 애플리케이션 개발자 프로젝트의 일환으로 Sun Microsystems는 ME Java API용 개방형 소스(Java.net) 프로젝트 버전의 JSON을 제공합니다. 이 소스 코드는 CLDC 1.0과 1.1(부동 소숫점 지원)에서 각각 조건부 컴파일을 수행하는 방법을 비교한 적절한 지침과 함께 제공됩니다. JSON ME 소스 코드는 JSON.org에서도 사용할 수 있지만 조건별 지침은 없습니다.
예상대로 JSON ME는 전체 JSON Java API의 일부입니다. 다음 표에서는 JSON Java API에 대해 간단히 설명합니다.
|
패키지 이름 |
클래스 |
|---|---|
org.json.me |
|
org.json.me.util |
|
JSON과 JSON ME는 사용하는 일부 데이터 형식(예를 들어 JSON ME는 Vector 및 Hashtable 사용), 그리고 부동 소숫점 지원(CLDC 1.1)과 관련된 조건부 컴파일을 위한 컴파일러 명령 등 내부적으로 차이가 있습니다. JSON ME JAR 파일은 25KB 정도 됩니다.
JSON Java API는 JSONWriter 및 JSONStringer 등 편리한 클래스 몇 가지를 제공하여 JSON 텍스트를 생성합니다. 저는 개인적으로 코어 JSONObject를 직접 JSONArray와 함께 사용하는 방법을 선호합니다. 이 경우 필요한 구문 분석 기능은 제공합니다. 앞서 언급한 이러한 코어 클래스를 사용하여 간단한 DataTypes 예제 클래스를 JSON에서 직렬화하거나 직렬화를 해제하여 JSON으로 되돌리는 간단한 예를 몇 가지 들어 보겠습니다. 다음 코드 단편은 우리가 예제로 사용할 JSON 텍스트를 보여 줍니다.
{ |
매우 간단해 보이지요? JSON을 사용하면 개체를 개체 안에 중첩하고 XML에서 정의할 수 있는 모든 데이터 구조를 정의할 수 있습니다.
|
예제 DataTypes 클래스
다음 코드 단편은 JSON ME에서 지원하는 데이터 형식이 포함된 DataTypes 예제 Java 클래스를 정의합니다. 이 클래스는 JSON으로/에서 직렬화하는 방법을 보여 주는 데 사용할 클래스입니다. 다시 한 번 강조하지만, CLDC 1.0에서는 고정 소숫점/실수를 지원하지 않습니다.
/** |
지원되는 데이터 형식은 String, int, long, boolean 및 앞서 말한 이러한 기본 데이터 형식의 어레이입니다.
JSON으로 직렬화: JSON 텍스트 생성
이제 DataTypes 클래스 인스턴스의 JSON 텍스트 표시를 만들어 보겠습니다. JSON Java API는 Java에서 JSON과 유사한 구문을 사용할 수 있는 헬퍼 클래스(JSONWriter 및 JSONStringer)를 제공하지만 다음 예제에서는 간단하고 효과적인 API인 JSONOjbect와 JSONArray를 직접 사용합니다. 또한 이 방법에서 사용되는 코드는 XML을 생성하는 코드에 쉽게 매핑할 수 있습니다. 아래의 코드 단편은 toJSON() 헬퍼 직렬화 메소드를 보여 줍니다.
/** |
참고: 하드 코딩된 텍스트 문자를 사용하는 것은 좋은 방법이 아니지만 강조하여 보여드리기 위해 예제 코드 단편에서 사용한 것입니다.
JSON 직렬화 해제: JSON 텍스트에서 클래스 초기화
다음 코드 단편은 입력한 JSON 텍스트 문자열의 직렬화를 해제하고 DataType 클래스의 인스턴스를 초기화하는 fromJSON() 헬퍼 메소드를 보여 줍니다.
/** |
직렬화 메소드 사용
다음 코드 단편은 위의 toJSON() 및 fromJSON() JSON 직렬화 메소드를 사용하는 방법을 보여 줍니다.
// Create an initialize instance of DataTypes |
다음은 디버깅을 위해 앞의 코드에 사용되는 dump() 헬퍼 메소드입니다.
dump() 헬퍼 메소드/** |
이 문서에서는 XML에 대한 대안으로 ME용 JSON을 소개했습니다. JSON의 특징은 모바일 애플리케이션 및 임베디드 애플리케이션에 적합한 경량이라는 점입니다. Sun Microsystems에서 개발한 ME Java API용 JSON을 사용하면 JSON 텍스트를 쉽게 구문 분석할 수 있습니다. API는 작으면서도 애플리케이션 내에서 데이터를 교환하는 데 필요한 모든 기능을 제공합니다.
- JSON.org 웹 사이트
- JSON.org에서 JSON ME(Zip 파일) 다운로드
- 모바일 및 임베디드 애플리케이션 개발자 프로젝트(Java.net)
- 모바일 AJAX for ME(Java.net)에 조건부 컴파일 기능이 있는 JSON ME 포함(CLDC 1.0, 1.1)
- ECMAScript 언어 규격 3번째 에디션
- Java ME 개발자 홈 페이지
C. Enrique Ortiz는 오랫동안 모바일 기술자 겸 블로거로 활동했습니다. 모바일 기술에 열광하며 실제로 모바일 기술을 개발하는 전문가로, 다년 간 전반적인 모바일 컴퓨팅 관련 일을 하고 있습니다.
이 글의 영문 원본은
Using JavaScript Object Notation (JSON) in Java ME for Data Interchange
에서 보실 수 있습니다.
"Java ME" 카테고리의 다른 글
- PIM API 시작하기 (댓글 2개 / 트랙백 0개) 2006/02/02
- Java ME에서 JSON(JavaScript Object Notation) 사용하여... (댓글 0개 / 트랙백 0개) 2008/10/13
- 모바일 플랫폼의 비교: Java ME와 Adobe Flash Lite (댓글 0개 / 트랙백 1개) 2008/06/03
- 모바일 및 임베디드 개발자 컨퍼런스 Recap (댓글 0개 / 트랙백 0개) 2008/02/26
- NetBeans를 사용해야 하는 12가지 이유 (댓글 4개 / 트랙백 0개) 2006/08/26
- 블루투스와 GPS 사용: 1부 - 무선 직렬 포트 데이터 읽기 (댓글 0개 / 트랙백 0개) 2008/08/11
- 자바 ME 장치 매트릭스로 필터 사용 (댓글 0개 / 트랙백 0개) 2008/03/13
- Wireless Messaging API 2.0 (댓글 4개 / 트랙백 0개) 2005/12/07
- OpenGL ES와 모바일 센서 API를 이용한 게임 업계의 새로운 지평 (댓글 0개 / 트랙백 0개) 2008/05/20
- 블루투스와 GPS 사용: 제2부 - GPS 데이터 구문 분석 및 맵 렌더링 (댓글 0개 / 트랙백 0개) 2008/12/11
댓글을 달아 주세요