βοΈ μ 무λ₯Ό μ§ννλ©΄μ Domain ν΄λμ€μ Serializable μΈν°νμ΄μ€λ₯Ό ꡬννλ κ²½μ°λ₯Ό λ΄€λ κ²½νμ΄ μλλ°, λΉμμλ μ ꡬνν΄μΌ νλμ§ μ°Ύμλ³΄μ§ μκ³ κ°λ°νμλ€.
μ΄λ² μκ°μλ Serializable μΈν°νμ΄μ€λ μ΄λ€ μ©λλ‘ μ¬μ©νλμ§ κ³΅λΆν΄λ³΄μ
Serializable
public class SerializableTest implements Serializable {
...
}
μ¬μ μ μλ―Έλ‘λ μ§λ ¬νλΌλ λ»μ κ°μ§λ€. μ§λ ¬νλ 무μμΌκΉ?
λͺ¨λμκ³ μμ μλ λͺ¨λλμΉκ° μ’μ ν΅λ‘λ₯Ό ν΅κ³Ό ν λ κ°κ°μ μκ°±μ΄λ‘ λλμ΄μ Έ μ§λκ°λ κ²μ λ³Ό μ μλλ°, μ΄λ Serializable κ³Ό λΉμ·νλ€κ³ μκ°λλ€.
μ ν리μΌμ΄μ μ μΈλΆμ λ°μ΄ν°λ₯Ό μ£Όκ³ λ°κΈ° μν΄μ Stream μ΄μ©νμ¬ ν΅μ νλλ°, μ΄ λ Streamμ byte νΉμ byte[] λ§ ν΅κ³Ό ν μ μλ€κ³ λ°°μ λ€.
μ΄ λ§μ λ°μ΄ν°λ₯Ό byte λ¨μλ‘ λλμ΄μΌλ§ Streamμ ν΅ν΄ μΈλΆμ λ°μ΄ν°λ₯Ό μ μ‘ ν μ μλ€λ λ§μ΄λ€.
μ¦, λ°μ΄ν°(λͺ¨λλμΉ)λ₯Ό μ’μ ν΅λ‘(Stream)μ μ§λκ°κ² νλ €λ©΄ λͺ¨λ μκ°±μ΄(byte νΉμ byte[])λ‘ λλλ κ³Όμ μ΄ νμνλ°, Serializable μΈν°νμ΄μ€λ₯Ό ν΅ν΄ ν΄κ²° ν μ μλ€.
π νμ¬ λμ μ€μΈ JVMμμ μλ‘κ² λ§λ κ°μ²΄λ₯Ό JVM μΈλΆμ νμΌλ‘ μ μ₯ν΄μΌ νλ κ²½μ°
π μ μ₯μ₯μΉμ μ μ₯λμ΄ μλ κ°μ²΄ νμΌμ μ½μ΄μΌ νλ κ²½μ°
π λ€λ₯Έ μλ²μμ μ μ‘ν κ°μ²΄ λ°μ΄ν°λ₯Ό μ½κ±°λ, νμ¬ λμ μ€μΈ μλ²μμ μΈλΆ μλ² νΉμ ν΄λΌμ΄μΈνΈμκ² κ°μ²΄ λ°μ΄ν°λ₯Ό μ μ‘ν΄μΌ νλ κ²½μ°
μμ κ²½μ° μΈμμλ λ€μν μν©μμ μ¬μ©λλλ°, μ΄λ κ² μΈλΆλ‘ κ°μ²΄ λ°μ΄ν°λ₯Ό μ μ‘νλ €κ³ ν λ Serializable μΈν°νμ΄μ€λ₯Ό ꡬννμ§ μλλ€λ©΄ InvalidClassException μμΈλ₯Ό λ°μμν¨λ€.
μ΄λ κ°λ¨ν μλ₯Ό λ€λ©΄ Streamμ ν΅κ³Όνλ €κ³ νλ λ°μ΄ν°κ° Stream μ ꡬμ λ§μ§ μμ ν΅κ³Όλ₯Ό λͺ»νλ κ²μ΄λ€.
SerialVersionUID - μμ§λ ¬νμ 쑰건
public class HashMap<K,V> extends AbstractMap<K,V>
implements Map<K,V>, Cloneable, Serializable {
private static final long serialVersionUID = 362498820763181265L;
...
}
Java API λ΄λΆμ μλ ν΄λμ€λ€μ μ΄ν΄λ³΄λ©΄ μ’ μ’ μμ μ½λμ²λΌ UIDκ° λ©€λ² νλλ‘ μ μΈλμ΄ μλ κ²μ νμΈ ν μ μλ€. ν΄λΉ λ³μμ μλ―Έλ 무μμΌκΉ?
μλμ κ°μ κ°μ²΄μ΄ μλ€κ³ κ°μ ν΄λ³΄μ.
public static class SerialDto implements Serializable {
private String name;
private String address;
private String phoneNumber;
private String sex;
public SerialDto(String name, String address, String phoneNumber, String sex) {
super();
this.name = name;
this.address = address;
this.phoneNumber = phoneNumber;
this.sex = sex;
}
@Override
public String toString() {
return "μ΄λ¦ : " + name + " / μ£Όμ : " + address + " / μ νλ²νΈ : " + phoneNumber + " / μ±λ³ : " + sex;
}
}
ν΄λΉ κ°μ²΄λ Serializable μΈν°νμ΄μ€λ₯Ό ꡬννκΈ° λλ¬Έμ μ μμ μΌλ‘ JVM μΈλΆμ λ°μ΄ν°λ₯Ό μ°κ±°λ λμΌν κ°μ²΄ λ°μ΄ν°λ₯Ό μ½μ΄μ¬ μ μλ€.
κ·Έλ°λ° λ§μ½ μΈλΆμμ μ½μ΄μ¨ SerialDto ν΄λμ€μ λ©€λ² λ³μκ° νμ¬ μν μ€μΈ JVMμ μ‘΄μ¬νλ SerialDto ν΄λμ€μ λ©€λ² λ³μκ° λ€λ₯΄λ€λ©΄ μ΄λ»κ² λ κΉ?
μ΄ λ, μ¬λμ μ
μ₯μμλ λ©€λ² νλκ° μ‘°κΈ λ€λ₯΄κΈ°λ νμ§λ§ κ°μ SerialDtoμ΄λ€. νμ§λ§ JVM μ
μ₯μμλ λ©€λ² νλκ° λ€λ₯΄κΈ° λλ¬Έμ μ ν λ€λ₯Έ κ°μ²΄λ‘ μΈμνλ€.
μ΄λ λ³μμ μΆκ°λ λ³κ²½ λ±μ μμ
μ΄ μ§νλλ©΄ serialVersionUIDμ κ°μ΄ μλμΌλ‘ λ³κ²½λκΈ° λλ¬Έμ κ°μ κ°μ²΄λ‘ μΈμνμ§ λͺ»νλ κ²μ΄λ€.
μ΄λ κ² λ³κ²½μ΄ μμ£Ό μΌμ΄λλ κ²½μ°μ λ°μνλ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄μ serialVersionUID λ³μλ₯Ό λ©€λ² νλλ‘ μ μΈνλ€.
public static class SerialDto implements Serializable {
final static long serialVersionUID = 1L;
private String name;
private String address;
private String phoneNumber;
private String sex;
...
}
μ΄λ κ² ν΄λμ€μ λ©€λ² νλλ‘ serialVersionUID λ³μλ₯Ό μ μΈνλ©΄ λ³μμ μΆκ°λ λ³κ²½ λ±μ μν₯ λ°μ§ μκ³ κ°μ κ°μ²΄λ‘ μΈμ ν μ μκ² λλ€.
trasient
μ§λ ¬ν λ κ°μ²΄ μ€ νΉμ λ©€λ² νλλ μ μΈνκ³ μ μ₯νμ¬ μΈλΆμμ ν΄λΉ κ°μ²΄λ₯Ό μμ§λ ¬ν ν λ μ μΈλ λ©€λ² νλλ νμΈ ν μ μκ² κ΅¬νν΄μΌ νλ κ²½μ°κ° μ‘΄μ¬νλ€.
μ΄λ¬ν κ²½μ°μλ λ©€λ² νλμ νν΄ transient μμ½μ΄λ₯Ό μ μΈν΄μ£Όλ©΄ ν΄λΉ λ©€λ² νλλ κ°μ²΄ μ§λ ¬νμμ μ μΈλλ€.
private transient String nickname;
μ§λ ¬νλ₯Ό μ¬μ©νλ μ΄μ ?
μ§λ ¬νμ λ°©λ²μλ λ¬Έμμ΄ μ§λ ¬ν(csv, json)μ μ΄μ§ μ§λ ¬ν κ·Έλ¦¬κ³ Serializable μΈν°νμ΄μ€λ₯Ό μ΄μ©ν μ§λ ¬ν λ°©λ²μ΄ μλ€.
μμ λ°©λ² μ€ μν©μ λ§κ² μ¬μ©νλ©΄ λμ§λ§, Java νλ‘κ·Έλλ°μμ μ κ΅³μ΄ Serializable μΈν°νμ΄μ€λ₯Ό ꡬνν΄μ μ¬μ©νλκ±ΈκΉ?
π Java μμ€ν μ μ΅μ νλμ΄ μλ ꡬ쑰
→ λ³λμ μμ μμ΄ λ©€λ² νλμ νμ μ μμμ 맀νν΄μ£ΌκΈ° λλ¬Έμ μ κ²½ μ¨μΌ νλ λΆλΆμ΄ μ€μ΄λ λ€.
π λλ¬Έμ μμ§λ ¬νλ₯Ό μννκ³ λ°λ‘ κ°μ²΄μ λ΄λΆ λ°μ΄ν°μ μ κ·Ό ν μ μλ€.
νμ§λ§ SerialVersionUID κ°μ λͺ¨λ κ°μ²΄μ λν΄ κ°λ°μκ° μΌμΌν μμ ν΄μ€μΌ νλ λ²κ±°λ‘μμ΄ μ‘΄μ¬νλ€.
π μ΄λ‘ μΈν΄ λ³λλ‘ SUIDλ₯Ό μ§μ νμ§ μμ κ°μ²΄λ ν΄λΉ κ°μ²΄μ λ΄λΆ κ΅¬μ‘°κ° λ³κ²½λ κ²½μ° μ¬μ© ν μ μκ² λλ€.
μ΄λ¬ν μ§λ ¬νλ JVM λ©λͺ¨λ¦¬μλ§ μμ£Όνκ³ μλ κ°μ²΄ λ°μ΄ν°λ₯Ό κ·Έλλ‘ μμνκ° νμν λ μ¬μ©λλλ°QueryDSL κΈ°μ μ΄ λ μ€λ₯Έλ€.
μ΄λ μμ€ν
μ΄ μ’
λ£λλλΌλ κ°μ²΄ λ°μ΄ν°κ° μμ΄μ§μ§ μλ μ₯μ μ κ°μ§λλ°, λλΆμ λ€νΈμν¬λ‘μ μ μ‘λ κ°λ₯ν΄μ§λ€.
μ°Έκ³ μ¬μ΄νΈ
'Programming > Java' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Effective Java] μ EnumSet κ³Ό EnumMap μ μ¬μ©ν΄μΌ νλκ° (0) | 2022.11.20 |
---|---|
F019 - Socket (0) | 2021.06.22 |
F017 - Blocking, Non-Blocking / Synchronous, Asynchronous (2) | 2021.06.15 |
F016 - File, I/O, Stream (0) | 2021.06.14 |
F015 - Set (μμ± μ€) (0) | 2021.05.31 |