"๊ทธ๋ ๊ฒ ๋น ๋ฅด์ง ์์, ์ ์์ด! ๋ ๊ฐ์ง ๊ตํ์ด ๋ ์์ด!"
"๋ ๊ฐ? ์์ฐ. ๊ธ์์. ๋น์ ์์ ์ ๋ฉ์ง์ ํฅ์์ํค๊ธฐ ์ํด ๋ฌด์์ ํ์ง ์๊ฒ ์ต๋๊น! ๋๋ ๊ท๋ฅผ ๊ธฐ์ธ์ด๊ณ ์์ต๋๋ค."
"JSON๊ณผ ๊ฐ์ XML์ ์๋ก ๋ค๋ฅธ ํ๋ก๊ทธ๋จ๊ณผ ์ปดํจํฐ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ ๋ ์์ฃผ ์ฌ์ฉ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ XML๋ก ์์ ํ ๋ Java ํ๋ก๊ทธ๋๋จธ์ ์ถ์ ํฌ๊ฒ ๋จ์ํํ๋ ์ฌ๋ฌ ํ๋ ์์ํฌ๊ฐ ์์ต๋๋ค. ์ค๋์ ๊ทธ ์ค ํ๋๋ฅผ ์๊ฐํ๊ฒ ์ต๋๋ค."
"JAXB๋ XML ์์ ์ ์ํ ํ์ํ ๋ค๋ชฉ์ ํ๋ ์์ํฌ์ ๋๋ค."
"JAXB๋ JDK์ ์ผ๋ถ์ด๋ฏ๋ก ๋ณ๋๋ก ๋ค์ด๋ก๋ํ ํ์๊ฐ ์์ต๋๋ค."
"๋จผ์ ์ฌ์ฉ ๋ฐฉ๋ฒ์ ์๋ฅผ ๋ณด์ฌ ๋๋ฆฐ ๋ค์ ๋ถ์ํ๊ฒ ์ต๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค."
public static void main(String[] args) throws JAXBException
{
// Create an object to be serialized into XML
Cat cat = new Cat();
cat.name = "Missy";
cat.age = 5;
cat.weight = 4;
// Write the result of the serialization to a StringWriter
StringWriter writer = new StringWriter();
// Create a Marshaller object that will perform the serialization
JAXBContext context = JAXBContext.newInstance(Cat.class);
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
// And here's the serialization itself:
marshaller.marshal(cat, writer);
// Convert everything written to the StringWriter
String result = writer.toString();
System.out.println(result);
}
@XmlType(name = "cat")
@XmlRootElement
public class Cat
{
public String name;
public int age;
public int weight;
public Cat()
{
}
}
<cat> <name> Missy </name> <age> 5 </age> <weight> 4 </weight> </cat>
"์ด๋ค ์ด์ ์์์ธ์ง ์ด ์ฝ๋๋ JSON ์ง๋ ฌํ๋ฅผ ์๊ฐ๋๊ฒ ํฉ๋๋ค. ๋์ผํ ์ฃผ์์ด์ง๋ง JSON์ ObjectMapper๋ฅผ ์ฌ์ฉํ์ผ๋ฉฐ ์ด๊ฒ์ Context ๋ฐ Marshaller๋ฅผ ์ฌ์ฉํฉ๋๋ค."
"๋ค. ์ ๋ง ๋น์ทํฉ๋๋ค. Jackson์ JAXB๋ฅผ ๋ชจ๋ธ๋ก ํ์ต๋๋ค. ํ์ง๋ง JAXB๋ ์ด๋๊ฐ์์ ๋ณต์ฌ๋์์ต๋๋ค. ์ฒ์๋ถํฐ ์ฒ์ฌ์ ์ธ ๊ฒ์ ๋ฐ๋ช ํ ์๋ ์์ต๋๋ค."
"๊ทธ๋ฐ ๊ฒ ๊ฐ์ต๋๋ค."
"์๊ฒ ์ต๋๋ค. ๋ค์๊ณผ ๊ฐ์ด ์งํ๋ฉ๋๋ค."
"4-7ํ์์ Cat ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ ๋ฐ์ดํฐ๋ก ์ฑ์๋๋ค."
"10๋ฒ์งธ ์ค์์ Writer ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋กํฉ๋๋ค."
"13๋ฒ์งธ ์ค์์ '์ปจํ ์คํธ'๋ฅผ ๋ง๋ญ๋๋ค. ์ด๊ฒ์ ObjectMapper์ ์ ์ฌํ์ง๋ง ๋ ๊ฐ์ ์ถ๊ฐ ์์ ๊ฐ์ฒด๊ฐ ์์ฑ๋ฉ๋๋ค. Marshaller ๋ ์ง๋ ฌํ์ฉ์ด๊ณ Unmarshaller ๋ ์ญ์ง๋ ฌํ์ฉ์ ๋๋ค. Jackson๊ณผ ์ฝ๊ฐ์ ์ฐจ์ด๊ฐ ์์ง๋ง ๊ทผ๋ณธ์ ์ผ๋ก ๋ค๋ฅด์ง ์๋ค."
"14ํ์์ Marshaller ๊ฐ์ฒด๋ฅผ ๋ง๋ญ๋๋ค . ๋ง์ฌ๋ง์ ์ง๋ ฌํ์ ๋์์ด์ ๋๋ค."
"15ํ์์ โโFORMATTED_OUTPUT ์์ฑ์ TRUE๋ก ์ค์ ํ์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๊ฒฐ๊ณผ์ ์ค ๋ฐ๊ฟ๊ณผ ๊ณต๋ฐฑ์ด ์ถ๊ฐ๋์ด ์ฝ๋๋ฅผ ์ฌ๋์ด ์ฝ์ ์ ์๊ณ ํ ์ค์ ๋ชจ๋ ํ ์คํธ๊ฐ ํ์๋์ง ์์ต๋๋ค."
"17ํ์์ ๊ฐ์ฒด๋ฅผ ์ง๋ ฌํํฉ๋๋ค."
"20-21ํ์์ ์ง๋ ฌํ ๊ฒฐ๊ณผ๋ฅผ ํ๋ฉด์ ํ์ํฉ๋๋ค."
"@XmlType(name = 'cat&') ๋ฐ @XmlRootElement ์ฃผ์์ ๋ฌด์์ ๋๊น?"
" @XmlRootElement๋ ์ด ๊ฐ์ฒด๊ฐ XML ์์์ 'ํธ๋ฆฌ์ ๋ฃจํธ'๊ฐ ๋ ์ ์์์ ๋ํ๋ ๋๋ค. ์ฆ, ์ต์์ ์์ค ์์๊ฐ ๋ ์ ์์ผ๋ฉฐ ๋ค๋ฅธ ๋ชจ๋ ์์๋ฅผ โโํฌํจํ ์ ์์ต๋๋ค."
" @XmlType(name = 'cat')์ ํด๋์ค๊ฐ JAXB ์ง๋ ฌํ์ ๊ด๋ จ๋์ด ์์์ ๋ํ๋ด๋ฉฐ ์ด ํด๋์ค์ ๋ํ XML ํ๊ทธ์ ์ด๋ฆ๋ ์ง์ ํฉ๋๋ค."
"์ข์, ์ด์ XML ์ญ์ง๋ ฌํ์ ์๋ฅผ ๋ณด์ฌ์ฃผ๊ฒ ๋ค."
public static void main(String[] args) throws JAXBException
{
String xmldata = "<cat><name>Missy</name><age>5</age><weight>4</weight></cat>";
StringReader reader = new StringReader(xmldata);
JAXBContext context = JAXBContext.newInstance(Cat.class);
Unmarshaller unmarshaller = context.createUnmarshaller();
Cat cat = (Cat) unmarshaller.unmarshal(reader);
}
@XmlType(name = "cat")
@XmlRootElement
public class Cat
{
public String name;
public int age;
public int weight;
public Cat()
{
}
}
"๋ชจ๋ ๊ฒ์ด ์ญ์จ๊ณผ ๊ฑฐ์ ๊ฐ์ต๋๋ค. ํ์ง๋ง ๋ง์ผ์ ๊ฒฝ์ฐ๋ฅผ ๋๋นํ์ฌ ์ฌ๊ธฐ์ ์งํ๋๋ ๋ชจ๋ ๊ฒ์ ์ค๋ช ํ๊ฒ ์ต๋๋ค."
"3๋ฒ์งธ ์ค์์ ์ญ์ง๋ ฌํํ XML์ ์ ์ฅํ๋ ๋ฌธ์์ด์ ์ ๋ฌํฉ๋๋ค ."
"4ํ์์ XML ๋ฌธ์์ด์ StringReader ๋ก ๋ํํฉ๋๋ค ."
"6ํ์์ ํด๋์ค ๋ชฉ๋ก์ ์ ๋ฌํ๋ JAXB ์ปจํ ์คํธ๋ฅผ ๋ง๋ญ๋๋ค ."
"7ํ์์ ์ญ์ง๋ ฌํ๋ฅผ ์ํํ ๊ฐ์ฒด์ธ Unmarshaller๋ฅผ ๋ง๋ญ๋๋ค ."
"๋ผ์ธ 9์์ ํ๋ ๊ธฐ ๊ฐ์ฒด์์ XML์ ์ญ์ง๋ ฌํํ๊ณ Cat ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์ต๋๋ค."
"์ด์ ๋ชจ๋ ๊ฒ์ด ๊ฑฐ์ ๋ช ๋ฐฑํด ๋ณด์ ๋๋ค. ํ์ง๋ง ๋ช ์๊ฐ ์ ์ ์ด๋ป๊ฒ ์๋ํ๋์ง ์์๋ด๋ ค๊ณ ๋จธ๋ฆฌ๋ฅผ ์ฅ์ด์ง๊ณ ์์์ต๋๋ค."
"๋น์ ์ด ๋ ๋๋ํด์ง๋ฉด ํญ์ ๊ทธ๋ฐ ์ผ์ด ์ผ์ด๋ฉ๋๋ค. ๋ณต์กํ ๊ฒ์ด ๋จ์ํด์ง๋๋ค."
"๋๋ ์ ์ ๋ ๋๋ํด์ง๊ณ ์๋ค๊ณ ? ๋๋ ๊ทธ๊ฒ์ ๋ํด ๊ธฐ๋ปํ ์๋ฐ์ ์๋ค."
"์ข์ต๋๋ค. JAXB ์ง๋ ฌํ ๊ฒฐ๊ณผ๋ฅผ ์ ์ดํ๋ โโ๋ฐ ์ฌ์ฉํ ์ ์๋ ์ฃผ์ ๋ชฉ๋ก์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค."
JAXB ์ฃผ์ | ์ค๋ช |
---|---|
@XmlElement(์ด๋ฆ) | ๋คํ ๊ทผ์ฒ์ ๋ฐฐ์น. ํ๋๋ XML ์์์ ์ ์ฅ๋ฉ๋๋ค. ํ๊ทธ์ ์ด๋ฆ์ ์ค์ ํ ์ ์์ต๋๋ค. |
@XmlAttribute(์ด๋ฆ) | ๋คํ ๊ทผ์ฒ์ ๋ฐฐ์น. ํ๋๋ XML ์์ฑ์ผ๋ก ์ ์ฅ๋ฉ๋๋ค! ์์ฑ์ ์ด๋ฆ์ ์ค์ ํ ์ ์์ต๋๋ค. |
@XmlElementWrapper(nillable = true) | ๋คํ ๊ทผ์ฒ์ ๋ฐฐ์น. ์์ ๊ทธ๋ฃน์ ๋ํด '๋ํผ ํ๊ทธ'๋ฅผ ์ค์ ํ ์ ์์ต๋๋ค. |
@XmlType | ํด๋์ค ๊ทผ์ฒ์ ๋ฐฐ์น. ๊ธฐ๋ณธ ์์ฑ์๊ฐ ์ ์ฉ์ธ ๊ฒฝ์ฐ ๊ฐ์ฒด ์์ฑ ๋ฐฉ๋ฒ์ ์ง์ ํ ์ ์์ต๋๋ค. |
@XmlJavaTypeAdapter | ๋คํ ๊ทผ์ฒ์ ๋ฐฐ์น. ํ๋๋ฅผ ๋ฌธ์์ด๋ก ๋ณํํ ํด๋์ค๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค. |
"ํฅ๋ฏธ๋กญ๊ตฐ์! ํ์ง๋ง ์ด๋ฌํ ์ฃผ์์ ์ฌ์ฉํ๋ ์๋ฅผ ์ ๊ณตํ ์ ์์ต๋๊น? ์ค๋ช ์ ํ ๊ฐ์ง์ด์ง๋ง ์์ ์๋ ๋ค๋ฅธ ๊ฒ์ ๋๋ค."
"์ข์์. ์๋ฅผ ๋ณด์ฌ๋๋ฆฌ๊ฒ ์ต๋๋ค. JAXB๋ฅผ ์ฌ์ฉํ๋ฉด ํ๋ ๋์ getter/setter ๋ฉ์๋์ ์ฃผ์์ ๋ฌ ์ ์๋ค๋ ์ ์ ์ถ๊ฐํ๊ณ ์ถ์์ต๋๋ค."
"๋ด๊ฐ ์ฝ์ํ ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค."
public static void main(String[] args) throws JAXBException
{
// Create Cat and Zoo objects to be serialized into XML
Cat cat = new Cat();
cat.name = "Missy";
cat.age = 5;
cat.weight = 4;
Zoo zoo = new Zoo();
zoo.animals.add(cat);
zoo.animals.add(cat);
// Write the result of the serialization to a StringWriter
StringWriter writer = new StringWriter();
// Create a Marshaller object that will perform the serialization
JAXBContext context = JAXBContext.newInstance(Cat.class, Zoo.class);
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
// Here's the serialization itself
marshaller.marshal(zoo, writer);
// Convert everything written to the StringWriter into a String
System.out.println(writer.toString());
}
@XmlType(name = "zoo")
@XmlRootElement
public class Zoo
{
@XmlElementWrapper(name = "wild-animals", nillable = true)
@XmlElement(name = "tiger")
public List<Cat> animals = new ArrayList<>();
}
public class Cat
{
@XmlElement(name = "catname")
public String name;
@XmlAttribute(name = "age")
public int age;
@XmlAttribute(name = "w")
public int weight;
public Cat()
{
}
}
<zoo> <wild-animals> <tiger age = "5" w = "4"> <catname>Missy</catname> </tiger> <tiger age = "5" w = "4"> <catname>Missy </catname> </tiger> </wild-animals> </zoo>
"์ด๋ฒ์๋ Cat ๊ฐ์ฒด๋ฅผ ์ง๋ ฌํํ๋ ๊ฒ์ด ์๋๋ผ Cat ๊ฐ์ฒด ์ปฌ๋ ์ ์ ์ ์ฅํ๋ Zoo ๊ฐ์ฒด๋ฅผ ์ง๋ ฌํํ๋ค๋ ์ ์ ์ ์ํ์ญ์์ค."
"๊ณ ์์ด ๊ฐ์ฒด๊ฐ ์ปฌ๋ ์ ์ ๋ ๋ฒ ์ถ๊ฐ๋์์ผ๋ฏ๋ก XML์ ๋ ๋ฒ ์์ต๋๋ค."
"์ปฌ๋ ์ ์๋ ์ปฌ๋ ์ ์ ๋ชจ๋ ์์๋ฅผ โโ๊ฐ์ธ๋ ์์ฒด ' ์ผ์ ๋๋ฌผ ' ํ๊ทธ๊ฐ ์์ต๋๋ค."
" ์ฐ๋ น ๋ฐ ์ฒด์ค ์์๋ ์ฐ๋ น ๋ฐ w w ์์ฑ์ด ๋์์ต๋๋ค ."
" @XmlElement ์์ฑ์ ์ฌ์ฉํ์ฌ ๊ณ ์์ด ํ๊ทธ๋ฅผ ํธ๋์ด ํ๊ทธ๋ก ๋ณ๊ฒฝํ์ต๋๋ค ."
"17ํ์ ์ฃผ์๋ฅผ ๊ธฐ์ธ์ด์ญ์์ค. ์ฌ๊ธฐ์ ์ฐ๋ฆฌ๋ ๋ ํด๋์ค( Zoo ๋ฐ Cat )๋ฅผ JAXB ์ปจํ ์คํธ์ ์ ๋ฌํฉ๋๋ค. ๋ ๋ค ์ง๋ ฌํ์ ๊ด๋ จ๋์ด ์๊ธฐ ๋๋ฌธ์ ๋๋ค."
"์ค๋์ ๋งค์ฐ ํฅ๋ฏธ๋ก์ด ๋ ์ด์์ต๋๋ค. ์๋ก์ด ์ ๋ณด๊ฐ ๋๋ฌด ๋ง์ต๋๋ค."
"๋ค. ๋ฐ๊ฐ์ต๋๋ค. ์ด์ ์ ์ ์ฌ์๋ค๊ฐ ๊ณ์ํ๊ฒ ์ต๋๋ค."
GO TO FULL VERSION