Java Transient

๋“ค์–ด๊ฐ€๋ฉฐ

  • transientํ‚ค์›Œ๋“œ๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Serialize์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  • Java Serialize

Java Transient์ด๋ž€?

  • transient๋Š” Serializeํ•˜๋Š” ๊ณผ์ •์— ์ œ์™ธํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ ์„ ์–ธํ•˜๋Š” ํ‚ค์›Œ๋“œ์ž…๋‹ˆ๋‹ค.

์™œ(Why) ํ•„์š”ํ• ๊นŒ์š”?

  • ํŒจ์Šค์›Œ๋“œ์™€ ๊ฐ™์€ ๋ณด์•ˆ์ •๋ณด๊ฐ€ ์ง๋ ฌํ™”(Serialize) ๊ณผ์ •์—์„œ ์ œ์™ธํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ์— ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ๋‹ค์–‘ํ•œ ์ด์œ ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†ก์„ ํ•˜๊ณ  ์‹ถ์ง€ ์•Š์„ ๋•Œ ์„ ์–ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Example

Model

class Member implements Serializable {
    private String name;
    private String email;
    private int age;
 
    public Member(String name, String email, int age) {
        this.name = name;
        this.email = email;
        this.age = age;
    }
    @Override
    public String toString() {
        return String.format("Member{name='%s', email='%s', age='%s'}", name, email, age);
    }
}

Main

  public static void main(String[] args) throws IOException, ClassNotFoundException {
        Member member = new Member("๊น€๋ฐฐ๋ฏผ", "deliverykim@baemin.com", 25); // Model ๊ฐ์ฒด
        String serialData = serializeTest(member); // ์ง๋ ฌํ™”
        deSerializeTest(serialData);    // ์—ญ์ง๋ ฌํ™”
    }

Result

  • ์•„๋ž˜์˜ ์ด๋ฏธ์ง€ ์ฒ˜๋Ÿผ ์ง๋ ฌํ™”๊ฐ€ ์ž˜ ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฆ„์— Transient Keyword๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ์–ด๋–จ๊นŒ์š”?

  • ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•ด ๋ณด๋‹ˆ field๋Š” ์œ ์ง€๋˜์ง€๋งŒ null๊ฐ’์ด ๋Œ€์ž…๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์ฃผ์˜ํ•ด์•ผํ•  ์ ์€ ์—†์„๊นŒ์š”?

  • ์ ์šฉํ•˜๋Š” Data์— ๋Œ€ํ•ด ์ดํ•ด๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
    • ์‹ค์ œ๋กœ ํ•„์š”๊ฐ€ ์—†๋Š”์ง€์— ๋Œ€ํ•œ ๊ณ ๋ ค.
    • Data๋ฅผ ์ œ์™ธํ•˜์˜€์„ ๊ฒฝ์šฐ์— ์„œ๋น„์Šค ์žฅ์• ์— ์ด์ƒ์ด ์—†๋Š”์ง€์— ๋Œ€ํ•œ ๊ณ ๋ ค.

Reference