Java의 Transient 키워드: 무엇이며 어떻게 작동합니까?

게시 됨: 2022-03-06

다른 모든 프로그래밍 언어와 마찬가지로 Java 프로그래밍 언어에는 특정 의미를 가진 예약어 목록이 있습니다. Java가 예약한 이 52개의 단어 집합을 키워드라고 합니다. 사전 정의된 의미가 있기 때문에 프로그래머는 키워드를 사용하여 클래스, 개체, 변수 및 기타 식별자의 이름을 지정할 수 없습니다. 이 52개의 키워드 중 하나는 일시적인 키워드입니다. 이것은 우리 블로그의 초점이 될 것입니다!

목차

자바의 임시 키워드 이해하기

Transient는 Java 프로그래밍 언어에 있는 보다 유용한 수정자 중 하나입니다. 일시적인 키워드의 주요 역할은 직렬화의 경우입니다. 임시 수정자는 클래스의 필드 멤버에 적용하여 이러한 특정 멤버에 대한 직렬화를 끌 수 있습니다.

간단히 말해서 Java의 transient 키워드는 직렬화를 피하기 위해 프로그래머가 사용할 수 있습니다. 데이터 구조의 특정 개체가 프로그래머에 의해 일시적으로 정의된 경우 직렬화되지 않습니다. 결과적으로 transient 키워드를 사용하여 일시적인 변수가 객체의 영구적인 상태의 일부가 아님을 JVM(Java Virtual Machine)에 표시할 수 있습니다.

아주 기본적인 예를 사용하여 Java에서 transient 키워드의 작동을 이해하려고 노력합시다. 먼저 Address 클래스를 만들고 이 클래스에 대해 streetName, areaName 및 houseNumber의 세 가지 속성을 정의합니다. 세 번째 속성인 houseNumber를 저장하거나 저장하고 싶지 않기 때문에 임시로 유지합니다.

클래스 주소는 직렬화 가능을 구현합니다.

{

개인 문자열 streetName;

개인 문자열 areaName;

개인 임시 문자열 houseNumber;

//세터와 게터

}

이제 Address 클래스의 인스턴스를 직렬화해 보겠습니다.

시도 {

ObjectOutputStream oos = 새로운 ObjectOutputStream(새로운 FileOutputStream("주소 정보.서버"));

주소 a = 새 주소();

a.setstreetName("MIG");

a.setareaName("Vikas Nagar");

emp.sethouseNumber("110");

//객체 직렬화

oos.writeObject(a);

oos.close();

} 잡기(예외 e)

{

System.out.println(e);

}

코드가 올바르게 작동하면 'houseNumber' 정보를 임시로 정의했기 때문에 저장되지 않았을 것입니다. 이제 원래 개체로 다시 역직렬화하고 정보가 저장되었는지 여부를 확인합니다.

시도 {

ObjectInputStream o = new ObjectInputStream(new FileInputStream("addressinfo.ser"));

//객체를 다시 읽는다

주소 readAddressInfo = (주소) o.readObject();

System.out.println(readAddressInfo.getstreetName());

System.out.println(readAddressInfo.getareaName());

System.out.println(readAddressInfo.gethouseNumber());

o.닫기();

} 잡기(예외 e)

{

System.out.println(e);

}

위의 Java 프로그램을 실행하면 다음과 같은 출력이 표시됩니다.

미그

비카스 나가르

없는

보시다시피 'houseNumber' 정보는 직렬화로 인해 영구적인 상태로 저장되지 않았기 때문에 'null' 값을 출력으로 받습니다. 이것이 바로 일시적인 키워드가 사용되는 이유입니다. 영구적이지 않고 일시적인 방식으로 값을 변수에 저장합니다.

Java의 '일시적인' 키워드 사용 사례

이제 transient 키워드와 그것이 하는 일을 이해했으므로 다음 논리적 질문은 – 언제 transient 키워드를 사용합니까?

일시적인 키워드를 사용하여 이점을 얻을 수 있는 몇 가지 상황을 자세히 살펴봄으로써 일시적인 키워드에 대한 학습을 ​​확장해 보겠습니다.

다음은 염두에 두어야 할 몇 가지 일반적으로 발생하는 사용 사례입니다.

  • 일시적인 키워드의 첫 번째 사용 사례는 클래스 인스턴스 내의 다른 필드에서 계산되거나 파생된 데이터 필드가 있는 경우입니다. 결과적으로 이러한 필드는 프로그래밍 방식으로 계산해야 하며 다른 값에 종속됩니다. 그렇기 때문에 이러한 필드를 영구적으로 유지하는 대신 일시적인 키워드를 사용하여 직렬화하지 않을 수 있습니다. 다른 수치에서 계산된 이러한 일시적인 값의 예에는 타임스탬프 기반 값, 백분율 기반 값 등이 포함될 수 있습니다. 이러한 모든 경우에 현재 존재하는 값을 기반으로 변수 값을 계산하고 있습니다.
  • 또 다른 중요한 사용 사례는 어떤 경우에도 JVM 외부로 누출되어서는 안 되며, 일시적인 키워드를 사용하여 직렬화되지 않을 수 있는 모든 유형의 보안 정보로 작업하는 경우일 수 있습니다.
  • Java Development Kit 내에서 "직렬화 가능"으로 표시되지 않은 필드는 일시적인 키워드와 함께 사용할 수 있습니다. 여기서 주목해야 할 중요한 점은 직렬화 가능한 인터페이스를 구현하지 않는 모든 Java 클래스는 직렬화 가능한 클래스 내에서 참조되지 않기 때문에 직렬화할 수 없다는 것입니다. 결과적으로 기본 클래스를 직렬화하기 전에 "일시적"으로 표시되지 않은 경우 "java.io.NotSerializableException"이 발생할 수 있습니다.
  • 마지막으로 일부 필드를 직렬화하는 것이 이해가 되지 않는 경우가 있습니다. 예를 들어 코드에 로거 참조를 추가한 경우 해당 정보를 직렬화하고 싶지 않을 것입니다. 인스턴스의 상태를 나타내는 정보를 직렬화해야 합니다. 반면에 로거는 어떤 상태도 나타내지 않으므로 직렬화할 필요가 없습니다. 따라서 일시적인 키워드와 함께 사용해야 합니다.

결론적으로

위에서 논의한 사용 사례는 결코 완전한 것이 아닙니다. 일시적인 키워드로 실험하고 자신의 사용 사례를 생각해 보세요. 결국 키워드는 프로그래머를 위해 만들어지며 키워드의 기능과 의미를 알 때만 대부분의 키워드를 만들 수 있습니다.

이것으로 Java의 임시 키워드에 대한 이 블로그의 끝 부분에 도달했습니다. 이것은 소프트웨어 개발 경력에서 성장하기 위해 숙달해야 하는 입문 개념 중 하나입니다. 소프트웨어 개발 분야는 매우 역동적이면서도 최선을 다할 준비가 되어 있다면 매우 환영합니다!

upGrad에서 우리는 서로 다른 영역에 속한 전 세계의 학생들을 멘토링하고 안내했으며 소프트웨어 개발에서 경력을 시작하도록 도왔습니다. 소프트웨어 개발 PGP – 전체 스택 개발의 전문화 과정 은 신선하고 경험이 풍부한 전문가를 위해 설계되었습니다. 전문 튜터와 최첨단 학습 자료 외에도 재능 있는 동료, 종합적인 배치 지원, 업계 리더와의 일대일 멘토링도 받을 수 있습니다. 따라서 과정 내용을 확인하고 곧 등록하십시오!

1. Java에서 임시 키워드는 무엇입니까?

Java의 일시적인 키워드는 개체의 직렬화를 방지하는 데 사용할 수 있습니다. 일시적인 키워드를 사용하여 특정 필드가 보유한 값이 지속되지 않도록 합니다.

2. Java의 어떤 요소와 함께 일시적인 키워드를 사용할 수 있습니까?

Java에서 transient 키워드를 사용하여 클래스, 변수, 객체 또는 필드를 직렬화하지 않을 수 있습니다.

3. Java에서 transient 키워드와 volatile 키워드는 어떻게 다릅니까?

일시적인 키워드는 직렬화 프로세스를 피하기 위해 사용되는 반면 volatile 키워드는 주 메모리에 저장되지 않도록 변수와 함께 사용됩니다.