다른 프로젝트의 소스코드를 확인하다가 익숙치 않은 자바 키워드가 있어 이에 대해 공부한 내용을 정리해보았다.
transient와 volatile에 대해 함께 알아보자!

class Member implements Serializable {
private transient String name;
private String email;
private int age;
}
// Deserialize
Member{name='null', email='example@naver.com', age='28'}
객체의 필드 중 직렬화 하지 않을 필드에 사용한다.
왜 사용하는가?
static, final과 같이 사용하는 것은 무의미하다.
public class SharedClass {
public volatile int counter = 0;
}
" 멀티 쓰레드 환경에서 Thread가 변수의 값을 읽어올 때 CPU 캐시에 저장된 값이 다르기 때문에 변수 값 불일치 문제가 발생할 수 있게 된다. "
Multi Thread 환경에서 하나의 Thread만 read & write하고 나머지 Thread가 read하는 상황에서 가장 최신의 값을 보장한다.
여러 thread가 write 하는 상황인 경우, synchronized 를 통해 변수 read & write 의 원자성을 보장해야한다
성능에 관한 고민
메인 메모리에서 읽어오면 캐시보다 비용이 큼으로 변수 값 일치를 보장해야하는 경우에만 volatile 사용해야 한다.