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. 결론
이 기사에서 우리는 일시적인 키워드 의 사용법 과 직렬화 및 역직렬화에서의 동작을 보았습니다 .