자바의 일시적인 키워드

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; }

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

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

여기서 bookName 이 적절하게 유지되었음을 알 수 있습니다. 반면, 사본 필드의 값은 0 이고 설명 은 원래 값 대신 널 ( 각 데이터 유형의 기본값)입니다.

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();

deserialization 후 값을 확인할 때이 필드에 대해 transient 가 무시되고 원래 값이 유지 되었음을 알 수 있습니다 .

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

5. 결론

이 기사에서는 transient 키워드 의 사용법 과 직렬화 및 역 직렬화에서의 동작을 살펴 보았습니다 . 또한 final 키워드 에서 다른 동작을 보았습니다 .

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