JAVA/포스팅

자바 transient 제어자

짜집퍼박사(짜박) 2023. 11. 12. 12:52

transient는 자바의 직렬화(serialize) 과정에서 특정 멤버 변수를 직렬화에서 제외하도록 하는 제어자입니다. 직렬화는 객체를 데이터 스트림으로 변환하는 프로세스로, 이 과정에서 객체의 상태를 저장하고 나중에 다시 복원할 수 있습니다. transient 제어자는 특정 필드가 직렬화에서 제외되어야 함을 나타냅니다.

 

transient 사용 예제

import java.io.*;

class MyClass implements Serializable {
    private String normalField;
    private transient String transientField;

    public MyClass(String normalField, String transientField) {
        this.normalField = normalField;
        this.transientField = transientField;
    }

    public String getNormalField() {
        return normalField;
    }

    public String getTransientField() {
        return transientField;
    }
}

public class TransientExample {
    public static void main(String[] args) {
        MyClass obj = new MyClass("NormalValue", "TransientValue");

        // 직렬화
        try (ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("data.ser"))) {
            out.writeObject(obj);
        } catch (IOException e) {
            e.printStackTrace();
        }

        // 역직렬화
        try (ObjectInputStream in = new ObjectInputStream(new FileInputStream("data.ser"))) {
            MyClass restoredObj = (MyClass) in.readObject();
            System.out.println("Normal Field: " + restoredObj.getNormalField());
            System.out.println("Transient Field: " + restoredObj.getTransientField());
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

이 예제에서 MyClass는 Serializable 인터페이스를 구현하고 있습니다. transientField는 transient 키워드로 표시되어 있습니다. 객체를 직렬화한 후 다시 역직렬화하면, transientField는 직렬화에서 제외되어 null 값이 됩니다. 이를 통해 특정 필드를 직렬화에서 제외하고 싶을 때 transient 제어자를 사용할 수 있습니다.

 

With ChatGPT

'JAVA > 포스팅' 카테고리의 다른 글

자바 strictfp 제어자  (0) 2023.11.12
자바 native 제어자  (0) 2023.11.12
자바 volatile 제어자  (0) 2023.11.12
자바 synchronized 제어자  (0) 2023.11.12
자바 abstract 제어자  (0) 2023.11.12