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 |