๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Java·๏ปฟServlet·๏ปฟJSP

JAVA์˜ ๊ฐ์ฒด ์ง๋ ฌํ™”(Serialization)์™€ JSON ์ง๋ ฌํ™”

by Leica 2020. 7. 10.
๋ฐ˜์‘ํ˜•

JAVA์˜ ๊ฐ์ฒด ์ง๋ ฌํ™”(Serialization)์™€ JSON ์ง๋ ฌํ™”

๐Ÿ“ ๋‹ค๋ฃจ๋Š” ๋‚ด์šฉ

  • ์ง๋ ฌํ™”์™€ ์—ญ์ง๋ ฌํ™”์˜ ๊ฐœ๋…
  • ObjectInputStream๊ณผ ObjectOutputStream
  • Serializable
  • transient
  • ์ง๋ ฌํ™”/์—ญ์ง๋ ฌํ™”์˜ ๊ตฌํ˜„
  • serialVersionUID
  • Jackson์„ ์ด์šฉํ•œ JSON ์ง๋ ฌํ™”

 

์ง๋ ฌํ™”, ์—ญ์ง๋ ฌํ™”๋ž€?

์ง๋ ฌํ™”
- ๊ฐ์ฒด์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ I/O ์ŠคํŠธ๋ฆผ์— ์“ฐ๊ธฐ(์ถœ๋ ฅ) ์œ„ํ•ด ์—ฐ์†์ ์ธ(serial) ๋ฐ์ดํ„ฐ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ

์—ญ์ง๋ ฌํ™”
- I/O ์ŠคํŠธ๋ฆผ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์„œ(์ž…๋ ฅ) ๊ฐ์ฒด๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ

์ž๋ฐ”์—์„œ ์ง๋ ฌํ™”์™€ ์—ญ์ง๋ ฌํ™”๋Š” ๊ฐ์ฒด๋ฅผ ํŒŒ์ผ๋กœ ์ €์žฅํ•˜๊ฑฐ๋‚˜ ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ์ „์†กํ•˜๊ธฐ ์œ„ํ•ด ์ œ๊ณต๋˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.
๊ฐ์ฒด๋Š” '์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜์˜ ์ง‘ํ•ฉ'์ด๋ฏ€๋กœ ๊ฐ์ฒด๋ฅผ ์ €์žฅ/์ „์†กํ•˜๋Š” ๊ฒƒ์€ ๊ฐ์ฒด์˜ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ์ €์žฅ/์ „์†กํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•˜๋‹ค.

๊ถ๊ทน์ ์œผ๋กœ ๊ฐ์ฒด์˜ ์ง๋ ฌํ™”๋Š” ์„œ๋“œํŒŒํ‹ฐ์—์„œ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ด๋‹ค.

๊ฐ์ฒด ์ง๋ ฌํ™”๋Š” JVM์—์„œ ์ž๋ฐ” ๊ฐ์ฒด๋ฅผ ๋‚ด๋ณด๋‚ด๋Š”(์ถœ๋ ฅํ•˜๋Š”) ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์ด๋‹ค. ์ง๋ ฌํ™”๋œ ๊ฐ์ฒด๋Š” ํŒŒ์ผ๋กœ ์ €์žฅํ•˜๊ฑฐ๋‚˜, ๋„คํŠธ์›Œํฌ๋กœ ์ „์†กํ•˜๊ฑฐ๋‚˜, ๋‹ค๋ฅธ I/O ์ธํ„ฐํŽ˜์ด์Šค์— ๋‚ด๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

 

ObjectInputStream๊ณผ ObjectOutputStream

์ž๋ฐ”์—์„œ๋Š” ๊ฐ์ฒด์˜ ์ง๋ ฌํ™”, ์—ญ์ง๋ ฌํ™”๋ฅผ ์œ„ํ•ด ObjectInputStream๊ณผ ObjectOutputStream์„ ์ œ๊ณตํ•œ๋‹ค.

๊ฐ์ฒด๋ฅผ ์ŠคํŠธ๋ฆผ์— ์“ฐ๊ฑฐ๋‚˜(์ถœ๋ ฅ) ์ฝ๋Š” ๊ธฐ๋Šฅ(์ž…๋ ฅ)์„ ์ œ๊ณตํ•˜๋Š” ๋ณด์กฐ์ŠคํŠธ๋ฆผ(๊ธฐ๋ฐ˜์ŠคํŠธ๋ฆผ ํ•„์š”)

ObjectOutputStream extends OutputStream
- ์ง๋ ฌํ™” : ์ŠคํŠธ๋ฆผ์— ๊ฐ์ฒด๋ฅผ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ
- writeObject()

ObjectInputStream extends InputStream
- ์—ญ์ง๋ ฌํ™” : ์ŠคํŠธ๋ฆผ์œผ๋กœ๋ถ€ํ„ฐ ๊ฐ์ฒด๋ฅผ ์ž…๋ ฅ๋ฐ›๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ
- readObject() : Object๋กœ ๋ฆฌํ„ด๋˜๋ฏ€๋กœ ํ˜•๋ณ€ํ™˜ ํ•„์š”

writeObject()/readObject()๋ฟ๋งŒ ์•„๋‹ˆ๋ผ primitive(๊ธฐ๋ณธ, ์›์‹œ) ํƒ€์ž…์— ๋Œ€์‘ํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋„ ์ œ๊ณต๋จ

 

์ฐธ๊ณ ๋กœ ๋˜ ๋‹ค๋ฅธ ๋ณด์กฐ ์ŠคํŠธ๋ฆผ ์ค‘ DataInputStream/DataOutputStream์€ Object ํƒ€์ž…์„ ์ œ์™ธํ•˜๊ณ  writeByte(), wirteChar(), writeUTF()๋‚˜ readByte(), readChar(), readUTF()์™€ ๊ฐ™์ด ๊ธฐ๋ณธ์ ์ธ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์œ ์ง€ํ•˜๋ฉฐ ์ฝ๊ฑฐ๋‚˜ ์“ฐ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š”๋ฐ, ์ง๋ ฌํ™”์˜ ๊ธฐ๋ฐ˜ ๊ฐœ๋…์ด ๋œ ์ŠคํŠธ๋ฆผ์ด๋‹ค.

 

๊ฐ์ฒด ์ง๋ ฌํ™”, ์—ญ์ง๋ ฌํ™”์˜ ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ

// ๊ฐ์ฒด๋ฅผ ์ง๋ ฌํ™”ํ•˜์—ฌ ํŒŒ์ผ์— ์ €์žฅ
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("objectfile.ser"));
oos.writeObject(new Member());

// ํŒŒ์ผ๋กœ๋ถ€ํ„ฐ ๊ฐ์ฒด๋ฅผ ์ฝ์–ด ๊ฐ์ฒด ์ƒ์„ฑ
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("objectfile.ser"));
Member member = (Member) ois.readObject();  // Object๋กœ ๋ฆฌํ„ด๋˜๋ฏ€๋กœ ๋ช…์‹œ์  ํ˜•๋ณ€ํ™˜ ํ•„์š”

 

Serializable

java.io.Serializable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค๋งŒ ๊ฐ์ฒด๋ฅผ ์ง๋ ฌํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.

Serializable ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๊ตฌํ˜„ํ•ด์•ผํ•˜๋Š” ๋ฉ”์†Œ๋“œ๊ฐ€ ์—†๋Š”, ๊ฐ์ฒด์˜ ์ง๋ ฌํ™”๋ฅผ ๋ช…์‹œํ•˜๋Š” ์šฉ๋„์˜ ๋งˆํฌ ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค.

๋‹ค์Œ์€ ์ƒ์†(is-a), ํฌํ•จ(has-a) ๊ด€๊ณ„์—์„œ์˜ ์ง๋ ฌํ™” ์กฐ๊ฑด(๋ฌธ๋ฒ•)์„ ์ •๋ฆฌํ•œ ๊ฒƒ์ด๋‹ค.

Serializable ์ธํ„ฐํŽ˜์ด์Šค๋Š” JVM์—๊ฒŒ ์ด ํด๋ž˜์Šค๊ฐ€ ์ง๋ ฌํ™”๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๋ ค์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

๐Ÿ“ ์ƒ์†(is-a)
๋ถ€๋ชจ ํด๋ž˜์Šค๊ฐ€ Serializable์„ ๊ตฌํ˜„ํ•˜๋ฉด

- ์ž์‹ ํด๋ž˜์Šค๋Š” ํ•ญ์ƒ ์ง๋ ฌํ™”๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
- ์ž์‹ ํด๋ž˜์Šค๋ฅผ ์ง๋ ฌํ™”ํ•˜๋ฉด ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋„ ํ•จ๊ป˜ ์ง๋ ฌํ™”๋œ๋‹ค.

์ž์‹ ํด๋ž˜์Šค๋งŒ Serializable์„ ๊ตฌํ˜„ํ•˜๋ฉด
- ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋Š” ์ง๋ ฌํ™”๋˜์ง€ ์•Š๋Š”๋‹ค.
- ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋„ ์ง๋ ฌํ™” ๋Œ€์ƒ์— ํฌํ•จํ•˜๋ ค๋ฉด ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.
1. ์กฐ์ƒ ํด๋ž˜์Šค๊ฐ€ Serializable์„ ๊ตฌํ˜„ํ•œ๋‹ค.
2. ์ง๋ ฌํ™” ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ๊ตฌํ˜„ํ•œ๋‹ค.

๐Ÿ“ ํฌํ•จ(has-a)
ํด๋ž˜์Šค๊ฐ€ ์ง๋ ฌํ™”ํ•  ์ˆ˜ ์—†๋Š” ๊ฐ์ฒด๋ฅผ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋กœ ์ฐธ์กฐํ•˜๊ณ  ์žˆ์œผ๋ฉด(๋ณ€์ˆ˜ ํƒ€์ž…์ด ์•„๋‹Œ ์‹ค์ œ ๊ฐ์ฒด์˜ ํƒ€์ž…์— ์˜ํ•ด ๊ฒฐ์ •๋จ)
- ์ง๋ ฌํ™” ๋ถˆ๊ฐ€(NotSerializableException)
- ์ง๋ ฌํ™” ๋ถˆ๊ฐ€ํ•œ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜์—๋Š” transient๋ฅผ ๋ถ™์—ฌ ์ œ์™ธํ•˜๊ณ  ์ง๋ ฌํ™” ๊ฐ€๋Šฅ

 

transient

์œ„์™€ ๊ฐ™์ด ์ง๋ ฌํ™”ํ•˜๋ ค๋Š” ํด๋ž˜์Šค์— ์ง๋ ฌํ™”ํ•  ์ˆ˜ ์—†๋Š” ๊ฐ์ฒด๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ์œผ๋ฉด transient๋ฅผ ๋ถ™์—ฌ ์ง๋ ฌํ™” ๋Œ€์ƒ์—์„œ ์ œ์™ธํ•˜๊ณ  ์ง๋ ฌํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.

- ์ง๋ ฌํ™” ๋Œ€์ƒ์—์„œ ์ œ์™ธ
- transient ํ•„๋“œ๋Š” ์—ญ์ง๋ ฌํ™” ์‹œ null(์ฐธ์กฐํ˜•) ๋˜๋Š” ํƒ€์ž…์˜ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ๋ฐ˜ํ™˜๋œ๋‹ค.
public class Member implements Serializable {
    
    String name;
    transient String password;  // ์ง๋ ฌํ™” ๋Œ€์ƒ์—์„œ ์ œ์™ธ๋˜์–ด ์ง๋ ฌํ™” ์‹œ null ์ฒ˜๋ฆฌ
}

 

์ง๋ ฌํ™”์™€ ArrayList

์ง๋ ฌํ™” ์ˆœ์„œ์™€ ์—ญ์ง๋ ฌํ™” ์ž‘์—… ์ˆœ์„œ๋ฅผ ์ผ์น˜์‹œ์ผœ์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—(๊ฐ์ฒด a, b c๋ฅผ ์ง๋ ฌํ™”ํ•˜๋ฉด ์—ญ์ง๋ ฌํ™”์‹œ์—๋„ a, b, c ์ˆœ์œผ๋กœ ์ˆ˜ํ–‰) ๋งŽ์€ ๊ฐ์ฒด๋ฅผ ์ง๋ ฌํ™”ํ•  ๋•Œ๋Š” ์ˆœ์„œ๋ฅผ ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š์•„๋„ ๋˜๋Š” ArrayList์™€ ๊ฐ™์€ ์ปฌ๋ ‰์…˜์— ๋‹ด์•„ ์ง๋ ฌํ™”ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

 

// ๊ฐœ๋ณ„ ์ง๋ ฌํ™”, ์—ญ์ง๋ ฌํ™”
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("serialize_test.ser"));
oos.writeObject(new Member("Kate", 30, "1234"));
oos.writeObject(new Member("Jason", 23, "5678"));
oos.writeObject(new Member("Aaron", 35, "9012"));

ObjectInputStream ois = new ObjectInputStream(new FileInputStream("serialize_test.ser"));
System.out.println(ois.readObject());
System.out.println(ois.readObject());
System.out.println(ois.readObject());

System.out.println("==========================================");

// ArrayList์— ๋‹ด์•„ ์ง๋ ฌํ™”
List<Member> memberList = new ArrayList<>();
memberList.add(new Member("Kate", 30, "1234"));
memberList.add(new Member("Jason", 23, "5678"));
memberList.add(new Member("Aaron", 35, "9012"));

oos.writeObject(memberList);
System.out.println(ois.readObject());

๐Ÿ–ฅ ์‹คํ–‰ ๊ฒฐ๊ณผ

Member{id=1001, name='Kate', age=30, password='null'}
Member{id=1002, name='Jason', age=23, password='null'}
Member{id=1003, name='Aaron', age=35, password='null'}
==========================================
[Member{id=1004, name='Kate', age=30, password='null'}, Member{id=1005, name='Jason', age=23, password='null'}, Member{id=1006, name='Aaron', age=35, password='null'}]

 

์ง๋ ฌํ™”/์—ญ์ง๋ ฌํ™” ์ง์ ‘ ๊ตฌํ˜„ํ•˜๊ธฐ

ObjectOutputStream์˜ writeObject(), ObjectInputStream์˜ readObject()๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ฐ์ฒด๋ฅผ ์ง๋ ฌํ™”, ์—ญ์ง๋ ฌํ™”ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋Š” ์ง๋ ฌํ™”๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ œ์•ฝ ์‚ฌํ•ญ์ด ์žˆ๋‹ค. ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋„ ํ•จ๊ป˜ ์ง๋ ฌํ™”ํ•˜๋ ค๋ฉด Serializable์„ ๊ตฌํ˜„ํ•œ ์ž์‹ ํด๋ž˜์Šค์— writeObject(), readObject()๋ฅผ ์„ ์–ธํ•˜์—ฌ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค.

 

private void writeObject(ObjectOutputStream oos) throws IOException {

    // ๋ถ€๋ชจ ์ง๋ ฌํ™”
    oos.writeUTF(๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜ ์ด๋ฆ„);       // String
    oos.writeInt(๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜ ์ด๋ฆ„);       // int
    oos.writeDouble(๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜ ์ด๋ฆ„);    // double
    ...
    
    // ์ž๊ธฐ ์ž์‹  ์ง๋ ฌํ™”
    oos.defaultWriteObject();
}

private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {

    // ๋ถ€๋ชจ ์—ญ์ง๋ ฌํ™”
    ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜ ์ด๋ฆ„ = ois.readUTF();     // String
    ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜ ์ด๋ฆ„ = ois.readInt();     // int
    ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜ ์ด๋ฆ„ = ois.readDouble();  // double
    ...
    
    // ์ž๊ธฐ ์ž์‹  ์ง๋ ฌํ™”
    ois.defaultReadObject();
}

 

serialVersionUID - ํด๋ž˜์Šค ๋ฒ„์ „๊ด€๋ฆฌ

- ์ง๋ ฌํ™” ์ˆ˜ํ–‰ ์‹œ ํด๋ž˜์Šค ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜๋Š” ํด๋ž˜์Šค์˜ ๋ฒ„์ „ ๊ฐ’
- ์—ญ์ง๋ ฌํ™” ์ˆ˜ํ–‰ ์‹œ ์ด ๊ฐ’์„ ๋น„๊ตํ•ด์„œ ์ผ์น˜ํ•ด์•ผํ•จ
- ๋‹ค๋ฅผ ๊ฒฝ์šฐ InvalidClassException ๋ฐœ์ƒ
- ์ง๋ ฌํ™”์— ์˜ํ–ฅ์ด ์—†๋Š” static ๋ณ€์ˆ˜๋‚˜ transient ๋ณ€์ˆ˜ ์ถ”๊ฐ€ ์‹œ InvalidClassException ๋ฐฉ์ง€ ํ•„์š”
- ์ด๋ฅผ ์œ„ํ•ด ์ง๋ ฌํ™” ํด๋ž˜์Šค์— serialVersionUID๋ฅผ  ์ง์ ‘ ์ •์˜
- ์ง์ ‘ ์ •์˜ํ•˜๋ฉด ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ  ์ด๋ฅผ ์‚ฌ์šฉํ•จ
- ๋ณดํ†ต jdk์— ํฌํ•จ๋œ serialver ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ƒ์„ฑ

 

serialver๋ฅผ ์‚ฌ์šฉํ•œ serialVersionUID์˜ ์ƒ์„ฑ ์˜ˆ

 

JSON ์ง๋ ฌํ™”, ์—ญ์ง๋ ฌํ™”

์ง€๊ธˆ๊นŒ์ง€๋Š” ๊ฐ์ฒด ์ง๋ ฌํ™”๋ฅผ JVM๊ณผ ObjectInputStream/ObjectOutputStream์— ์œ„์ž„ํ•˜๋Š” ๋ฐฉ์‹์ด์—ˆ์ง€๋งŒ XML, JSON๊ณผ ๊ฐ™์€ ํฌ๋งท์„ ์ด์šฉํ•œ ์ง๋ ฌํ™”๋„ ๊ฐ€๋Šฅํ•˜๋‹ค. ์ด๋กœ ์ธํ•œ ์žฅ์ ์€ ๋‹ค๋ฅธ ํ™˜๊ฒฝ, ๋‹ค๋ฅธ ์–ธ์–ด๋กœ ๋งŒ๋“ค์–ด์ง„ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ๋„ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

 

JSON ํŒŒ์‹ฑ, ์ฒ˜๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž๋ฐ” ๊ฐ์ฒด๋ฅผ JSON์œผ๋กœ ์ง๋ ฌํ™”ํ•˜๊ฑฐ๋‚˜ JSON ๋ฐ์ดํ„ฐ๋ฅผ ์ž๋ฐ” ๊ฐ์ฒด๋กœ ์—ญ์ง๋ ฌํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” Jackson์„ ์‚ฌ์šฉํ•œ๋‹ค.

 

(1) Object to JSON(์ง๋ ฌํ™”)

 

pom.xml

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.11.1</version>
</dependency>

 

java

List<Member> memberList = new ArrayList<>();
memberList.add(new Member("Kate", 30, "1234"));
memberList.add(new Member("Jason", 23, "5678"));
memberList.add(new Member("Aaron", 35, "9012"));

ObjectMapper mapper = new ObjectMapper();

// object to json
mapper.configure(MapperFeature.PROPAGATE_TRANSIENT_MARKER, true);
mapper.writeValue(new File("test.json"), memberList);

 

test.json

[
  {
    "id": 1001,
    "name": "Kate",
    "age": 30
  },
  {
    "id": 1002,
    "name": "Jason",
    "age": 23
  },
  {
    "id": 1003,
    "name": "Aaron",
    "age": 35
  }
]

 

(2) JSON to Object(์—ญ์ง๋ ฌํ™”)

java

ObjectMapper mapper = new ObjectMapper();

// json to object
mapper.configure(MapperFeature.PROPAGATE_TRANSIENT_MARKER, true);
mapper.writeValue(new File("test.json"), memberList);
System.out.println(mapper.readValue(new File("test.json"), new ArrayList<Member>().getClass()));

 

configure()๋Š” transient ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ์ถ”๊ฐ€ํ•œ ์ฝ”๋“œ์ด๋‹ค.

ํ•„๋“œ์— ์ง์ ‘ @JsonIgnore ์• ๋…ธํ…Œ์ด์…˜์„ ๋ถ™์—ฌ๋„ ๋œ๋‹ค.

 

๐Ÿ–ฅ ์‹คํ–‰ ๊ฒฐ๊ณผ

[{id=1001, name=Kate, age=30}, {id=1002, name=Jason, age=23}, {id=1003, name=Aaron, age=35}]

Process finished with exit code 0

 

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€