> Java > java지도 시간 > 본문

Java에서 'Transient' 키워드의 목적은 무엇입니까? 효과적으로 사용하는 방법은 무엇입니까?

王林
풀어 주다: 2024-08-21 06:07:02
원래의
1121명이 탐색했습니다.

What is the Purpose of the “Transient” Keyword in Java? How to Effectively Use It?

1. Java의 Transient 키워드 소개

1.1 Java에서 "일시적"이란 무엇을 의미합니까?

Java의 transient 키워드는 직렬화해서는 안 됨을 나타내기 위해 클래스 필드에 적용되는 수정자입니다. 객체가 직렬화되면 모든 필드가 바이트 스트림으로 변환됩니다. 필드를 임시 필드로 표시하면 직렬화 중에 해당 필드를 무시하도록 JVM(Java Virtual Machine)에 지시하게 됩니다.

1.2 왜 Transient 키워드를 사용하는가?

암호와 같은 민감한 정보나 캐시나 파생 값과 같은 필수적이지 않은 데이터가 직렬화되는 것을 방지하려면 transient 키워드를 사용하는 것이 필수적입니다. 이는 보안과 성능 최적화 모두에 중요합니다.

예:

import java.io.Serializable;

public class UserSession implements Serializable {
    private String userName;
    private transient String password;

    public UserSession(String userName, String password) {
        this.userName = userName;
        this.password = password;
    }

    @Override
    public String toString() {
        return "UserSession{" +
                "userName='" + userName + ''' +
                ", password='" + password + ''' +
                '}';
    }
}
로그인 후 복사

이 예에서 passwordtransient로 표시되므로 UserSession 개체와 함께 직렬화되지 않습니다.

2. 사용 사례 및 이점 이해

일시적 키워드를 최대한 활용하려면 구체적인 사용 사례와 이점을 이해하는 것이 중요합니다.

2.1 민감한 데이터 보호

일시적을 사용하는 주요 이유 중 하나는 직렬화 중에 민감한 데이터를 보호하기 위한 것입니다. 예를 들어, 직렬화된 객체에 일반 텍스트 비밀번호를 저장하면 보안 위험이 발생할 수 있습니다. 이러한 필드를 일시적 으로 표시하면 해당 데이터가 직렬화에서 제외됩니다.

예:

// Serialization Process
UserSession session = new UserSession("JohnDoe", "supersecret");
System.out.println("Before Serialization: " + session);

FileOutputStream fileOut = new FileOutputStream("session.ser");
ObjectOutputStream out = new ObjectOutputStream(fileOut);
out.writeObject(session);
out.close();
fileOut.close();

// Deserialization Process
FileInputStream fileIn = new FileInputStream("session.ser");
ObjectInputStream in = new ObjectInputStream(fileIn);
UserSession deserializedSession = (UserSession) in.readObject();
in.close();
fileIn.close();

System.out.println("After Deserialization: " + deserializedSession);
로그인 후 복사

출력:

Before Serialization: UserSession{userName='JohnDoe', password='supersecret'}
After Deserialization: UserSession{userName='JohnDoe', password='null'}
로그인 후 복사

표시된 것처럼 역직렬화 후에는 비밀번호가 유지되지 않습니다.

2.2 성능 향상

때때로 클래스에 저장하기보다는 다시 계산할 수 있는 필드가 포함될 수 있습니다. 이러한 필드를 임시로 표시하면 직렬화되는 데이터의 양이 줄어들어 성능이 향상될 수 있습니다.

2.3 직렬화할 수 없는 필드의 직렬화 방지

스레드와 같은 특정 개체는 본질적으로 직렬화할 수 없습니다. 클래스에 직렬화할 수 없지만 지속할 필요가 없는 필드가 있는 경우 해당 필드를 임시로 표시하면 직렬화 문제를 방지할 수 있습니다.

예:

public class TaskExecutor implements Serializable {
    private transient Thread thread;

    public TaskExecutor() {
        this.thread = new Thread();
    }

    // Additional methods
}
로그인 후 복사

여기서 thread 필드는 transient로 표시됩니다. Thread 개체를 직렬화할 수 없기 때문입니다.

3. Transient 키워드의 대안

transient 키워드는 강력하지만 Java에서 직렬화를 제어하는 ​​다른 접근 방식도 있습니다.

3.1 외부화 가능한 인터페이스 사용

자세한 내용은 에서 확인하세요. Java에서 "Transient" 키워드의 목적은 무엇인가요? 어떻게 효과적으로 활용하나요?

위 내용은 Java에서 'Transient' 키워드의 목적은 무엇입니까? 효과적으로 사용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿