'2008/07/18'에 해당되는 글 1건

  1. 2008/07/18 XStream으로 자바 객체를 XML로 직렬화??????

[출처] http://blog.naver.com/mirnae?Redirect=Log&logNo=100050939501

[출처] XStream으로 자바 객체를 XML로 직렬화하기 |작성자 마검린

XStream으로 자바 객체를 XML로 직렬화하기

XStream을 사용하여 객체 퍼시스턴스, 설정, 그리고 데이터 전송을 쉽게하기



난이도 : 중급

Rajiv Bangalore, 선임 스태프 소프트웨어 엔지니어, IBM India Private Ltd.

옮긴이: 장동수 dwkorea@kr.ibm.com

2008 년 5 월 20 일

XML 직렬화는 객체 퍼시스턴스와 데이터 전송을 포함한 무수히 많은 쓰임새가 있습니다. 그러나 일부 XML 직렬화 기술은 구현하기 어렵습니다. XStream은 자바 객체를 XML로 직렬화하거나 그 반대로 역직렬화할 수 있는 가볍고 사용하기 쉬운 오픈 소스 자바(Java™) 라이브러리입니다. XStream을 설정하고, 이를 이용해 객체를 직렬화하고 역직렬화하는 방법을 배웁니다. 또한 설정 속성들을 XML 설정 파일에서 읽어오는 방법도 알아봅니다.

XStream 을 사용하면, 대부분의 자바 객체를 아무런 매핑없이 직렬화할 수 있다. 객체 이름은 요소 이름이 되고, 클래스 내의 문자열들이 XML 요소의 내용을 구성한다. XStream으로 직렬화할 클래스는 Serializable 인퍼페이스를 구현할 필요도 없다. XStream은 직렬화 도구일 뿐, 데이터 바인딩 도구가 아니므로 XML이나 XML 스키마 정의(XML Schema Definition: XSD)로부터 클래스를 생성하지 않는다.

XStream은 다른 직렬화 도구와 구별되는 세 가지 특징이 있다.

  1. XStream은 클래스에서 직렬화/역직렬화될 필드들의 가시성을 고려하지 않는다.
  2. 클래스에서 직렬화/역직렬화될 필드들을 위한 getter나 setter 메서드가 필요없다.
  3. 직렬화/역직렬화될 클래스는 기본 생성자가 필요없다.
어떤 서드파티 클래스라도 아무런 변경없이 XStream을 사용해 직렬화하고 역직렬화할 수 있다.

개발 환경 설정하기

다음에 나오는 절차에 따라 XStream를 다운로드하고 설치하자(참고자료).

  1. 이클립스 웹 사이트에서 이클립스를 다운로드해 원하는 폴더에 설치하자. 해당 디렉터리를 이 기사에서는 eclipse_home으로 표기하겠다. 이 기사는 이클립스 3.3 버전을 기준으로 설명한다.
  2. XStream 웹 사이트에서 XStream의 최신 안정 버전을 다운로드해 원하는 폴더에 설치하자. 해당 디렉터리를 이 기사에서는 xstream_home으로 표기하겠다. 이 기사는 XStream 1.2.2 버전을 기준으로 설명한다.
  3. 3 썬 웹 사이트에서 자바 플랫폼 스탠다드 에디션(Java Platform, Standard Edition: J2SE) 소프트웨어 개발 킷(software development kit: SDK)을 다운로드해 원하는 폴더에 설치하자. 해당 디렉터리를 이 기사에서는 java_home으로 표기하겠다. 이 기사는 1.5.0_05 버전을 기준으로 설명한다.

자바 프로젝트 만들기

File > New > Project를 선택하고, 다음 절차에 따라 자바 프로젝트를 생성하자.

  1. Java > Java Project > Next를 선택한다(그림 1).

    그림 1. 새 자바 프로젝트 시작하기


  2. 프로젝트 이름을 입력하고 Next를 클릭한다(그림 2).

    그림 2. 프로젝트 이름 채우기


  3. Finish를 클릭하여 작업을 마무리한다(그림 3).

    그림 3. 설정 마무리하기


그림 4는 이렇게 해서 만들어진 자바 프로젝트를 보여준다.


그림 4. 새로 만들어진 자바 프로젝트

XStream 지원 추가하기

아래 절차에 따라 방금 만든 프로젝트에 XStream 라이브러리를 추가하자.

  1. 이클립스의 Project Explorer에서 해당 프로젝트를 선택한 다음, Project 메뉴에서 Properties를 선택한다(그림 5).

    그림 5. XStream 라이브러리 추가하기


  2. Add External JARs를 클릭하고, xstream_home/lib 폴더에서 xstream-1.2.2.jar를 선택한다.
  3. OK를 클릭해 작업을 마무리한다(그림 6).

    그림 6. XStream 지원 마무리하기


그림 7은 XStream 지원이 추가된 프로젝트를 보여준다.


그림 7. 추가된 라이브러리들




위로


객체 직렬화하기

다음의 간단한 예제는 WriterReader 클래스를 통해 XStream을 사용해 객체를 직렬화하고/역직렬화하는 방법을 보여준다. Writer 클래스는 Employee 타입의 객체를 XML로 직렬화해 파일로 저장하기 위해 XStream API를 사용한다(Listing 1).


Listing 1. Writer.java
                
package com.samples;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import com.thoughtworks.xstream.*;

public class Writer {

public static void main(String[] args) {
Employee e = new Employee();

//setter 메서드를 사용해 속성을 설정한다.
//주의: 이 작업은 생성자에서도 할 수 있지만
//XStream이 생성자 없이도 직렬화를 수행할 수 있음을 보여주기 위해
//일부러 이렇게 했다.

e.setName("Jack");
e.setDesignation("Manager");
e.setDepartment("Finance");

//객체를 직렬화한다.
XStream xs = new XStream();

//파일을 파일시스템에 기록한다.
try {
FileOutputStream fs = new FileOutputStream("c:/temp/employeedata.txt");
xs.toXML(e, fs);
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}
}
}

Reader 클래스는 이 파일을 읽어 XML을 역직렬화하고, 데이터로부터 자바 객체를 만들어 낸다(Listing 2).


Listing 2. Reader.java
                
package com.samples;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import com.thoughtworks.xstream.*;
import com.thoughtworks.xstream.io.xml.DomDriver;

public class Reader {

public static void main(String[] args) {
XStream xs = new XStream(new DomDriver());
Employee e = new Employee();

try {
FileInputStream fis = new FileInputStream("c:/temp/employeedata.txt");
xs.fromXML(fis, e);

//방금 읽어들인 객체의 데이터를 출력한다
System.out.println(e.toString());

} catch (FileNotFoundException ex) {
ex.printStackTrace();
}

}
}

Listing 3Employee 객체의 구조를 보여준다.


Listing 3. Employee.java
                

package com.samples;

public class Employee {
private String name;
private String designation;
private String department;

public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDesignation() {
return designation;
}
public void setDesignation(String designation) {
this.designation = designation;
}
public String getDepartment() {
return department;
}
public void setDepartment(String department) {
this.department = department;
}
@Override
public String toString() {
return "Name : "+this.name+
"\nDesignation : "+this.designation+
"\nDepartment : "+this.department;
}
}




위로


설정 파일 읽기

복잡한 XML 파일 읽기
이 설정 예제는 단순한 XML 파일을 읽는 예를 보여준다. 복잡한 XML 파일을 읽으려면 커스텀 변환기(converter)가 필요할 것이다. 변환기 작성 튜토리얼을 XStream "변환기 튜토리얼" 사이트에서 볼 수 있다(참고자료).

대 부분의 응용 프로그램은 다수의 설정 값(properties)에 의존한다. 이 설정 값은 연결할 데이터 소스의 이름일 수도 있고, 로그 파일의 위치일 수도 있다. 설정 파일은 응용 프로그램을 다시 컴파일하지 않고도 설정 값을 변경할 수 있도록 해주고, 유지보수도 쉬워지므로 이러한 데이터를 저장하기에 가장 적합한 곳이다. 이 예제 시나리오는 XStream을 사용하여 응용 프로그램에서 XML 설정 파일로부터 설정 값을 읽는 방법을 보여준다.

전형적인 XML 데이터 바인딩은 XML 파일로부터 자바 객체를 생성(generate)해야 하지만, XStream을 사용하면 객체 생성 단계가 필요없다. 자바 클래스를 만들고 클래스의 필드를 읽고 싶은 XML의 요소에 매핑하면 된다. 이 예제는 Listing 4와 같은 설정 파일이 있다고 가정한다.


Listing 4. Config.xml
                
<?xml version="1.0" encoding="UTF-8"?>
<config>
<datasource-name>IRIS</datasource-name>
<ipaddress>9.124.74.85</ipaddress>
<logfilename>DailyLogApplication.log</logfilename>
<appender>console</appender>
</config>

Listing 5는 설정 파일을 읽어 설정 값을 자바 객체로 불러오는 ConfigReader 클래스의 소스를 보여준다.


Listing 5. ConfigReader.java
                
package com.samples;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import com.thoughtworks.xstream.*;
import com.thoughtworks.xstream.io.xml.DomDriver;

public class ConfigReader {

String datasourcename = null;
String ipaddress = null;
String logfilename = null;
String appender = null;

@Override
public String toString() {
//이 메서드는 멤버 변수의 값을 출력한다.
return "Datasource Name : "+datasourcename+
" \nIP Address : "+ipaddress+
" \nLogfilename : "+logfilename+
" \nAppender : "+appender;
}

/**
* @param args
* @throws FileNotFoundException
*/
public static void main(String[] args) throws FileNotFoundException {
XStream xs = new XStream(new DomDriver());

FileInputStream fis = new FileInputStream("c:/temp/Config.xml");
xs.aliasField("datasource-name", ConfigReader.class, "datasourcename");
xs.alias("config", ConfigReader.class);
ConfigReader r = (ConfigReader)xs.fromXML(fis);

System.out.println(r.toString());
}
}




위로


요약

몇 가지 간단한 절차만 거치면 XStream을 설치하고 응용 프로그램을 개발할 수 있다. 이 기사를 통해 XStream을 사용하여 자바 객체를 직렬화하고, 역직렬화하고, 설정 파일을 읽는 방법을 배웠으니 XStream 사이트에서 앨리어스(alias), 어노테이션(annotation), 변환기(converter)에 대해 더 자세히 배울 수 있다(참고자료). 앨리어스와 변환기를 사용하면 생성되는 XML을 완전히 제어할 수 있다.





위로


다운로드 하십시오

설명 이름 크기 다운로드 방식
이 기사의 자바 소스 코드 x-xstreamcode.zip 3KB HTTP
다운로드 방식에 대한 정보


참고자료

교육

제품 및 기술 얻기
  • 이클립스: 이클립스 웹 사이트에서 이클립스트를 다운로드하고 설치해 보자.

  • XStream 다운로드: XStream 웹 사이트에서 라이브러리를 다운로드해 객체와 XML간에 직렬화하는 데 사용해 보자.

  • IBM 시험판 소프트웨어: 한국 developerWorks를 통해 직접 다운로드할 수 있는 시험판 소프트웨어로 차세대 개발 프로젝트를 구축해보자.


토론


필자소개

Rajiv Bangalore는 IBM 인도의 선임 스태프 소프트웨어 엔지니어다. 7년 여에 걸쳐 다양한 자바 플랫폼 엔터프라이즈 에디션(Java EE) 개발 프로젝트에 참여하고 있다(rajiv.bangalore@in.ibm.com).

출처 : http://www.ibm.com/developerworks/kr/library/x-xstream/index.html?ca=drs-kr


Posted by HelolS