도찐개찐
[JAVA] transient 본문
들어가며
- transient키워드를 이해하기 위해서는 Serialize에 대한 이해가 필요합니다.
 - https://dev-truly.tistory.com/entry/JAVA-%EC%A7%81%EB%A0%AC%ED%99%94Serialize
 
Java transient이란?
- transient는 Serialize하는 과정에 제외하고 싶은 경우 선언하는 키워드입니다.
 
왜(Why) 필요할까요?
- 패스워드와 같은 보안정보가 직렬화(Serialize) 과정에서 제외하고 싶은 경우에 적용합니다.
 - 다양한 이유로 데이터를 전송을 하고 싶지 않을 때 선언할 수 있습니다.
 
Example
Model
class Member implements Serializable {
    private String name;
    private String email;
    private int age;
    public Member(String name, String email, int age) {
        this.name = name;
        this.email = email;
        this.age = age;
    }
    @Override
    public String toString() {
        return String.format("Member{name='%s', email='%s', age='%s'}", name, email, age);
    }
}
Main
  public static void main(String[] args) throws IOException, ClassNotFoundException {
        Member member = new Member("김배민", "deliverykim@baemin.com", 25); // Model 객체
        String serialData = serializeTest(member); // 직렬화
        deSerializeTest(serialData);    // 역직렬화
    }
Result
- 아래의 이미지 처럼 직렬화가 잘 된 것을 확인할 수 있습니다.

 
이름에 transient keyword를 추가하면 어떨까요?

- 결과를 확인해 보니 field는 유지되지만 null값이 대입되는 것을 확인할 수 있었습니다.
 

주의해야할 점은 없을까요?
- 적용하는 Data에 대해 이해가 필요합니다.
- 실제로 필요가 없는지에 대한 고려.
 - Data를 제외하였을 경우에 서비스 장애에 이상이 없는지에 대한 고려.
 
 
출처 : https://nesoy.github.io/articles/2018-06/Java-transient
728x90
    
    
  'JAVA' 카테고리의 다른 글
| [JAVA] Build 할 때 java.lang.NoClassDefFoundError: org/gradle/wrapper/GradleWrapperMain 에러 해결 (0) | 2023.03.20 | 
|---|---|
| [JAVA] 직렬화(Serialize) (0) | 2023.02.21 | 
| [JAVA] 네이밍 룰(Naming Role, Conventions) (0) | 2022.07.21 | 
| [JAVA] 자바 코딩 규칙(Code Conventions) (0) | 2022.07.21 | 
| [JAVA] Iterator (0) | 2022.07.20 | 
			  Comments