[번역] XStream 배우기 : 2분만에 배우는 XStream

 

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 요소 이름이 객체의 패키지를 포함한 전체 이름을 갖게 되기 때문에 조금은 크기가 커집니다. 다음에 진행될 "별칭 배우기" 참고하시면 자세한 내용을 아실 수 있습니다.

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com


객체를 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를 객체로 되돌립니다.
 
참고 자료

XStream vs Castor for XML serialization  : XStream과 Castor 작업한 경험을 쓴 글입니다.
XML and Java technologies: Data binding, Part 2: Performance : XML과 객체를 바인딩하는 솔루션들의 성능을 비교했습니다. XStream은 빠져있습니다.
Comparing Java Data Binding Tools : Java 객체와 XML의 바인딩 도구들을 비교했습니다. 이 또한 XStream이 나오기 전에 만들어진 문서라서 XStream은 빠져있습니다.
Thoughts on Web Services, part 5: To serialize or not to serialize : XML로 직렬화하는 것에 대한 이슈를 적었습니다.

 

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
38 Spring Batch 간단 정리 Sprong Batch 기초를 알아보자 file 졸리운_곰 2020.10.13 198
37 Spring Batch - ItemReader, ItemWriter, ItemProcessor 졸리운_곰 2020.10.13 370
36 spring batch» Spring Batch Tasklet Example file 졸리운_곰 2020.10.12 198
35 Spring Batch Example 2 - 간단한 Job만들기 file 졸리운_곰 2020.10.12 151
34 Spring batch Job 설정과 실행하기 file 졸리운_곰 2020.10.12 206
33 [Spring Batch] Configuring and Running a Job file 졸리운_곰 2020.10.12 121
32 [스프링] 스프링 배치 기본 개념 file 졸리운_곰 2019.12.24 244
31 Spring Batch 개념 정리 file 졸리운_곰 2019.12.24 257
30 스프링 배치 개발가이드 졸리운_곰 2019.12.24 321
29 Quartz + Spring Batch 조합! Quartz Scheduler 와 Spring Batch 의 궁합과 조합을 정리. file 졸리운_곰 2019.12.24 882
28 Spring Batch 간단 정리 file 졸리운_곰 2019.12.24 421
27 spring batch 소개 file 졸리운_곰 2019.12.24 208
26 Spring Batch - 소개 file 졸리운_곰 2019.12.24 207
25 Spring Batch Multithreading Example file 졸리운_곰 2019.01.31 285
24 Spring batch를 Parallel로 돌려보자 졸리운_곰 2019.01.31 399
23 Spring MVC 주요 애노테이션(Annotation)정리 file 졸리운_곰 2018.12.29 268
22 스프링/스프링부트 애노테이션(Annotation) 정리 졸리운_곰 2018.12.29 385
21 Spring Framework - annotation 정리 #1 졸리운_곰 2018.12.29 321
20 [Spring] Annotation 정리 졸리운_곰 2018.12.29 272
19 Maven 기초 사용법 졸리운_곰 2018.04.15 322
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED