1. 소개

이 기사에서는 먼저 transient 키워드를 이해 한 다음 예제를 통해 동작을 살펴보겠습니다.

2. 일시적인 사용

직렬화 의 컨텍스트에서 사용되는 일시적인 것으로 이동하기 전에 먼저 직렬화를 이해합시다 .

직렬화 는 객체를 바이트 스트림으로 변환하는 프로세스이고 역직렬화는 반대입니다 .

랜덤의 변수를 일시적인 것으로 표시하면 해당 변수는 직렬화되지 않습니다 . 일시적인 필드는 객체의 직렬화된 형태로 존재하지 않기 때문에 직렬화된 형태에서 객체를 생성할 때 역직렬화 프로세스는 이러한 필드에 대한 기본값을 사용합니다.

과도 키워드는 몇 가지 시나리오에서 유용합니다 :

  • 파생 필드에 사용할 수 있습니다.
  • 객체의 상태를 나타내지 않는 필드에 유용합니다.
  • 직렬화할 수 없는 참조에 사용합니다.

3. 예

작동하는 모습을 보기 위해 먼저 직렬화하려는 객체 Book 클래스를 생성해 보겠습니다 .

public class Book implements Serializable {
    private static final long serialVersionUID = -2936687026040726549L;
    private String bookName;
    private transient String description;
    private transient int copies;
    
    // getters and setters
}

여기에서 설명사본임시 필드 표시했습니다 .

클래스를 생성한 후 이 클래스의 객체를 생성합니다.

Book book = new Book();
book.setBookName("Java Reference");
book.setDescription("will not be saved");
book.setCopies(25);

이제 객체를 파일로 직렬화합니다.

public static void serialize(Book book) throws Exception {
    FileOutputStream file = new FileOutputStream(fileName);
    ObjectOutputStream out = new ObjectOutputStream(file);
    out.writeObject(book);
    out.close();
    file.close();
}

이제 파일에서 개체를 역직렬화해 보겠습니다.

public static Book deserialize() throws Exception {
    FileInputStream file = new FileInputStream(fileName);
    ObjectInputStream in = new ObjectInputStream(file);
    Book book = (Book) in.readObject();
    in.close();
    file.close();
    return book;
}

마지막으로 book 개체 의 값을 확인 합니다.

assertEquals("Java Reference", book.getBookName());
assertNull(book.getDescription());
assertEquals(0, book.getCopies());

여기에서 bookName 이 올바르게 유지되었음을 알 수 있습니다. 반면에 복사 필드의 값은 0  이고 설명원래 값 대신 각 데이터 유형의 기본값인 null 입니다.

4. 최종 행동

이제 final 키워드 와 함께 transient사용하는 경우를 살펴보겠습니다 . 이를 위해 먼저 Book 클래스 최종 임시 요소를 추가한 다음 빈 Book 개체 를 만듭니다 .

public class Book implements Serializable {
    // existing fields    
    
    private final transient String bookCategory = "Fiction";

    // getters and setters
}
Book book = new Book();

최종 수정자는 차이가 없습니다 . 필드가 일시적 이기 때문에 해당 필드 에 대한 값이 저장되지 않습니다. 역직렬화하는 동안 새 Book 개체는 Book 클래스에 정의된 기본값 Fiction가져 오지만 해당 값은 직렬화 데이터에서 가져오지 않습니다.

assertEquals("Fiction", book.getBookCategory());

5. 결론

이 기사에서 우리는 일시적인 키워드 의 사용법 과 직렬화 및 역직렬화에서의 동작을 보았습니다 .

항상 그렇듯이 모든 코드는 GitHub에서 사용할 수 있습니다 .

Junit footer banner