Java

Java transient

곰돌이생각해보니 2021. 7. 23. 23:51

Java transient 란?

transient 는 Serialize(직렬화 참고 : https://medium.com/@lunay0ung/basics-%EC%A7%81%EB%A0%AC%ED%99%94-serialization-%EB%9E%80-feat-java-2f3eb11e9a8  )

하는 과정에 제외하고 싶은 경우 선언하는 키워드다.

 

왜 필요한가?

  • 패스워드와 같은 보안정보가 직렬화과정에서 제외하고 싶은 경우에 적용
  • 다양한 이유로 데이터를 전송하고 싶지 않을 때 선언한다.

 

예시 )

 

Model

class Member implements Serializable {
	private String name;
   	private String eamil;
    	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 IOExcption, ClassNotFoundException {

    Member member = new Member("곰돌", "deliverykim@baemin.com", 25); //Model 객체
    String serialData = serializeTest(member); // 직렬화
    deSerializeTest(serialData);
    
}

 

👉 Result

 

직렬화가 잘됨

 

그러나 name 필드에 transient keyword를 추가하면? 🤔🤔🤔

private transient String name;
private String eamil;
private int age;

 

👉 Result

 

필드는 유지되지만 null값이 대입되는 것을 확인할 수 있다.

 

 

주의해야할 점

  • 적용하는 데이터에 대한 이해
  • 실제로 필요가 없는지에 대한 고려 (직렬화를 하지 않을 데이터가)
  • 데이터를 제외했을 때 서비스 장애에 이상이 없는지에 대한 고려