site_link1 http://gyumee.egloos.com/1291803 
site_link2  
site_link3 http://1 

XStream은 자바 객체를 XML로 직렬화 시키는 데 사용하는 도구입니다. 다르게 말하면 XML과 객체를 쌍방향 맵핑시켜주는 도구입니다. 자바 객체를 XML로 만들어서 파일이나 DB에 저장하거나 네트워크를 통해서 전송할 수 있게 해줍니다. 거꾸로 이렇게 만들어진 XML을 객체로 복원하기도 하고요. 비슷한 다른 유명 프로젝트로  Castor 와 자바 표준 JAXB 그리고 Quick 등이 있습니다.

XStream 튜토리얼이 한글로 번역된 것이 없어서 시간 될 때마다 하나씩 번역해 올려보겠습니다.
튜토리얼 구성은 이렇습니다.

 

  1. 2분만에 배우기 (원글)
  2. 별칭(Alias) 배우기 (원글)
  3. 애노테이션(Annotations) 배우기 (원글)
  4. 변환기(Converter) 배우기 (원글)
  5. 객체 스트림(Object Streams) 배우기 (원글)
  6. 영속화 API(Persistence API) 배우기 (원글)
  7. JSON 배우기 (원글)

오늘은 간단한 XStream을 사용법을 전체적으로 볼 수 있는 2분만에 배우기입니다.

2분만에 배우기

이 글은 XStream에 대해 아주 간단히 소개합니다. 대충 읽으시면 객체를 XML로 변환하고 그것을 거꾸로 복원하는 것이 얼마나 단순한지 아실 수 있습니다. 물론 앞으로 궁금한 부분이 생기실 것입니다.

직렬화될 객체 만들기

 

 

 

여기 간단한 클래스 두개가 있습니다. XStream은 이 객체들의 인스턴스를 XML로 변환하고 다시 복원할 수 있습니다.

 

 

public class Person {
  private String firstname;
  private String lastname;
  private PhoneNumber phone;
  private PhoneNumber fax;
  // ... constructors and methods
}

public class PhoneNumber {
  private int code;
  private String number;
  // ... constructors and methods
}

Note: 필드들이 private인 것을 주목하십시오. XStream은 필드의 접근 제한을 무시합니다. getter와 setter 또한 필요하지 않습니다. XStream은 기본 생성자를 꼭 만들어야 하는 제한도 없습니다.


XStream 초기화

 

XStream을 쓰려면 단순히 XSTream 객체를 생성하십시오.

XStream xstream = new XStream();

클래스 패스에 xstream-[version].jar와 xpp3-[version].jar가 있어야 합니다. XPP3 는 아주 빠른 XML pull parser 구현체입니다. 이 것에 종속되기 원하지 않는다면 대신 표준 JAXP DOM 파서를 사용할 수 있습니다.

XStream xstream = new XStream(new DomDriver()); // XPP3 라이브러리를 요구하지 않음
Note: 이 클래스는 일반적인 동작들을 위해 설계된 간단한 퍼세이드입니다. 보다 큰 융통성을 위해서, 다른 동작을 하는 자신만의 퍼세이드를 만드는 길을 택할 수도 있습니다.
 

이제 XStream으로 보다 간편히 XML 출력을 만들기위해, 위의 클래스의 이름을 XML 요소명으로 대응하는 별칭을 만들 수 있습니다.

xstream.alias("person", Person.class);
xstream.alias("phonenumber", PhoneNumber.class);

Note: 이 단계는 선택사항입니다. 이 작업 없이도 XStream은 잘 작동하지만 XML 요소 이름이 객체의 패키지를 포함한 전체 이름을 갖게 되기 때문에 조금은 크기가 커집니다. 다음에 진행될 "별칭 배우기" 참고하시면 자세한 내용을 아실 수 있습니다.


객체를 XML로 직렬화하기

Person 객체를 생성하고 필드에 값을 넣도록 하겠습니다.

 

Person joe = new Person("Joe", "Walnes");
joe.setPhone(new PhoneNumber(123, "1234-456"));
joe.setFax(new PhoneNumber(123, "9999-999"));

 

이제 XML로 변환하기 위해 해야 하는 것이라고는 단순히 XStream을 호출하는 것뿐 입니다.

String xml = xstream.toXML(joe);

결과는 다음과 같습니다.

<person>
  <firstname>Joe</firstname>
  <lastname>Walnes</lastname>
  <phone>
    <code>123</code>
    <number>1234-456</number>
  </phone>
  <fax>
    <code>123</code>
    <number>9999-999</number>
  </fax>
</person>

이렇게 간단합니다. XML이 얼마나 깔끔한지 보십시오.

 

직렬화된 XML에서 객채를 복원하기

 

 

다시 객체를 재조립하려면 이렇게 하십시오.

 

Person newJoe = (Person)xstream.fromXML(xml);

XStream은 이렇게 단순합니다.


정리

 

 

다시 정리해봅니다.

 

 

  • xstream.alias(String elementName, Class cls)를 사용해서 자작한 클래스를 요소이름에 대응시킬 클래스 이름의 별칭을 만듭니다. 
  • xstrean.toXML(Object obj)를 사용해서 객체를 XML로 변환합니다.
  • xstream.fromXML(String xml)을 사용해서 XML를 객체로 되돌립니다.