본문 바로가기

Back/Java

Java transient 사용하는 이유가 뭘까?

심심해서 눈에 띈 Exception 클래스를 하나하나 까보다가 특이한 것을 발견했다.

 

transient

 

처음 보는 용어였다. 클래스도 아니고 접근제어자도 아닌데 떡하니 적혀있다.

 

private transient Object backtrace;

 

이런 식으로 말이다.

정말 특이한 녀석이라서 궁금증이 생겨서 찾아봤다.

생각보다 결론은 간단하다.

 

직렬화 과정(Serialize)에서 특정한 정보를 배제하여 null 값을 출력하도록 하는 녀석이다.

비밀번호 같은 민감한 개인정보를 노출할 우려가 있다면 직렬화시 배제하도록 명령하는 것이다.

따지고 보면 접근제어자 느낌인데 그런 놈은 배운 적이 없다.

신기방기.

 

직접 사용처가 보고 싶다면, Exception 클래스를 찾아보면 된다.

예시는 다음과 같다.

 

public class Throwable implements Serializable {
    /** use serialVersionUID from JDK 1.0.2 for interoperability */
    @java.io.Serial
    private static final long serialVersionUID = -3042686055658047285L;

    /**
     * The JVM saves some indication of the stack backtrace in this slot.
     */
    private transient Object backtrace;

    /**
     * Specific details about the Throwable.  For example, for
     * {@code FileNotFoundException}, this contains the name of
     * the file that could not be found.
     *
     * @serial
     */
    private String detailMessage;

 

이놈은 상당히 매력적이다.

포트폴리오를 만들 때 떡하니 넣어놓으면... 가산점이 붙지 않을까 싶은 느낌이!