Java의 Transient

Mohammad Irfan 2023년10월12일
  1. Java에서 임시 변수 만들기
  2. Java의 Hibernate 엔터티 클래스에서 임시 변수 만들기
Java의 Transient

이 튜토리얼에서는 transient 키워드가 무엇인지, Java 애플리케이션에서 어떻게 사용하는지 소개합니다.

Transient는 변수를 직렬화 불가능으로 표시하는 데 사용되는 Java의 키워드입니다. 객체를 직렬화할 때 사용됩니다.

직렬화는 Java 객체를 바이트 스트림으로 변환하는 프로세스입니다. 따라서 파일에 유지될 수 있으며 파일에 지속되는 필드를 피하려면 해당 임시 항목을 표시합니다.

일시적인 방법은 표시할 수 없으며 필드만 표시할 수 있습니다. 몇 가지 예를 들어 이해합시다.

클래스를 직렬화 가능하게 만들려면 먼저 Seriablizable 인터페이스를 구현한 다음 변수와 함께 transient 키워드를 사용해야 합니다. 다음은 Serializable 인터페이스를 구현하는 직렬화 가능한 클래스 예제입니다. 그러나 필드 과도를 표시하지 않습니다.

class Student implements Serializable {
  /*
   *  non- transient fields
   */
  int id;
  String name;
  String email;
}

Java에서 임시 변수 만들기

이 예에서 Serializable 인터페이스를 구현하고 이메일을 임시로 표시하는 Student 클래스가 있습니다. 따라서 상태를 파일에 쓸 때 nameid만 파일에 기록됩니다. 이메일 데이터가 기록되지 않습니다. 동일한 파일을 읽고 데이터를 콘솔에 표시하여 확인할 수 있습니다. 아래의 예를 참조하십시오.

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

public class SimpleTesting {
  public static void main(String[] args) throws IOException, ClassNotFoundException {
    Student student = new Student();
    student.setId(10);
    student.setName("Rohan");
    student.setEmail("rohan@gmail.com");

    // Writing to a file
    FileOutputStream fileStream = new FileOutputStream("student.txt");
    ObjectOutputStream outStream = new ObjectOutputStream(fileStream);
    outStream.writeObject(student);
    outStream.flush();
    outStream.close();
    fileStream.close();

    // Reading file
    ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream("student.txt"));
    student = (Student) inputStream.readObject();
    System.out.println(student.id + " " + student.name + " " + student.email);
    System.out.println(Student.getSerialversionuid());
    inputStream.close();
  }
}

class Student implements Serializable {
  private static final long serialVersionUID = 1L;
  int id;
  String name;
  transient String email;

  public int getId() {
    return id;
  }
  public void setId(int id) {
    this.id = id;
  }
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public String getEmail() {
    return email;
  }
  public void setEmail(String email) {
    this.email = email;
  }
  public static long getSerialversionuid() {
    return serialVersionUID;
  }
}

출력:

10 Rohan null 1

출력에서 이메일이 null임을 알 수 있습니다.

Java의 Hibernate 엔터티 클래스에서 임시 변수 만들기

최대 절전 모드로 작업하고 일부 변수/필드를 일시적으로 만들고 싶다면 @Transient 수정자를 사용하십시오. 데이터베이스 테이블에 데이터 쓰기를 건너뜁니다. 이 주석은 최대 절전 모드로 작업할 때만 유용하며 주석이므로 필요한 모든 JAR을 프로젝트에 가져와야 합니다. 아래의 예를 참조하십시오.

@Entity
class Student implements Serializable {
  @Id int id;
  String name;
  @Transient String email; // transient

  public int getId() {
    return id;
  }
  public void setId(int id) {
    this.id = id;
  }
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public String getEmail() {
    return email;
  }
  public void setEmail(String email) {
    this.email = email;
  }
}