반응형

코드를 보다보면 종종 transient 라는 키워드를 볼 때가 있다.

public class TransferManager {
    @Autowired
    private transient CommandGateway commandGateway;
    private TransferCommandFactory commandFactory;
...
}

 

의미?

Serialization is the process of converting an object into a byte stream, and deserialization is the opposite of it.
When we mark any variable as transient, then that variable is not serialized.

Serialization is the process of making the object's state persistent. That means the state of the object is converted into a stream of bytes to be used for persisting (e.g. storing bytes in a file) or transferring (e.g. sending bytes across a network). In the same way, we can use the deserialization to bring back the object's state from bytes. the process of making the object's state persistent.

직렬화(serialization)는 object를 byte stream으로 컨버팅하는 과정이며 역직렬화는 반대 과정을 뜻한다. 직렬화는 객체의 상태를 유지하게하는 과정 중 하나인데, 보통 직렬화를 해서 파일을 만들거나 네트워킹 작업을 하기 때문이다.

transient로 변수를 마킹할 경우 그 변수는 직렬화에 포함되지 않는다(null로 표현됨).

단지 메모리 안에서만 사용되는 변수

 

어디에 주로 사용되나?

  • 한 인스턴스 안에서 계산되어진 값을 임시로 들고 있을 때(for derived fields)
  • 객체의 상태를 나타내는 값이 아닌 변수(not the state of the object)
  • 직렬화가 되지 않는 변수(non-serializable references; throw “java.io.NotSerializableException”)

 

참고1. @Transient

  • entity안에서 사용되는 어노테이션으로 필드를 DB에 저장하지 않도록 해줌.
  • 메모리에 올려다가 놓고 쓰긴하지만 영속성을 주지 않는다는 뜻(not persistent)

참고2. transient vs volatile

  • volitiled은 항상 (thread dependency가 있는 cpu cache가 아닌) 메인 메모리에서 읽어오는 값
  • 메인 메모리에서 read/write하기 때문에 비용이 더 큼(성능 악화)
  • 여러 스레드에서 같은 값으로 사용가능
  • Multi Thread 환경에서 하나의 Thread만 read & write하고 나머지 Thread가 read하는 상황에서 가장 최신의 값을 보장

 

다른 자바 키워드: https://www.w3schools.com/java/java_ref_keywords.asp

 

Java Keywords

W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.

www.w3schools.com

 

728x90
반응형

'개발 > java' 카테고리의 다른 글

[jmh] benchmark test  (0) 2022.08.04
[powermock] mock static method  (0) 2022.07.21
[java] jvm, java, gc  (0) 2022.02.24
[junit5] no test found / checked exception is invalid  (0) 2022.02.07
[junit] test runner  (0) 2022.01.03

+ Recent posts