본문 바로가기

JAVA를 잡아라!/Java

희소한 자바의 키워드

희소한 자바의 키워드

1. transient (선택적 객체의 직렬화)

객체의 상태 중에서는 직렬화시 그 상태가 저장될 필요가 없는 것이 있을 수 있다. 바이트 코드가 다시 객체로 복원될 때, 적당히 초기값을 넣어주기만 하면 되는 필드는 굳이 직렬화 대상에 포함시킬 필요가 없을 것이다. 예를 들어, 파일에 저장되어 있던 객체가 수정되었는지를 나타내는 boolean 필드로 modified라는 것이 있다고 할 때, 이 값은 굳이 직렬화시킬 필요가 없다. 어차피 메모리 상에서만 의미가 있기 때문이다. 그저, 객체를 다시 복원할 때, 이 값은 무조건 false로 세팅하고 시작하면 되는 것이다. 이러한 필드를 transient 필드라고 한다.
앞선 프로그램 소스 코드에 다음의 필드를 추가하는 등의 수정을 가하자.

transient boolean modified;
GeneralSerial() {
  name = "OOPSLA";
  iVal = 5;
  modified = true;
}
GeneralSerial(String n,int i,boolean m) {
  name = n;
  iVal = i;
  modified = m;
}
public static void main(String[] args) throws Exception {
  GeneralSerial cs = new GeneralSerial("HAHA",10,true);
  ....
// 역직렬화되었을 때, modified 값은 false가 된다.
}

그러면, 저장 후 읽어들일 때 modified값은 false가 되어 있는 것을 확인할 수 있다. 이렇게 직렬화될 필요가 없는 필드는 transient키워드로 직렬화 대상에서 제외시킬 수 있다.
"Transient 필드는 역직렬화되었을 때, 기본 초기값으로 초기화된다. 기본 생성자에서 초기화하는 값이 아님을 주의하기 바란다"

출전 : http://kdaq.empas.com/knowhow/view.html?num=168251&sq=transient++java

2. volatile

"레지스터를 믿지 말고 메모리에서 다시 읽어오라"는 지시자.
2개 이상의 process/thread에서 동시 접근하는 부분이 있다면, 무조건 volatile을 쓰는 습관을 들여두는게
좋습니다. 나중에 다른 곳에 포팅하거나 구조를 바꾸더라도 문제 발생할 확률이 적어집니다.
자바에서 주로 멀티 쓰레드에서 많이 사용합니다.

3. strictfp

strictfp"라는 키워드는 Java 프로그래밍 언어에 나중에 추가되었다. strictfp는 부동소수(floating point) 계산의 특정한(restrict) 사항들을 제어하는 데 사용된다.  

출전 : http://www.suntraining.co.kr/jsp/webzine/TechTipsView.jsp?wz_code=281

4. const

const 키워드를 사용해 선언한 상수는 선언할 때 초기화도 해야 한다. 그리고 const 상수는 자동으로 static이 된다. 따라서 const 상수는 static의 속성을 그대로 물려받아 객체를 생성하기 이전에 접근할 수 있다. Java에서는 const 키워드를 사용하지 않고, 대신에 final 키워드를 사용한다. Java에서 const 키워드는 goto 키워드처럼 키워드로 등록은 되어 있지만 아무런 기능도 구현되어 있지 않아 사용할 수가 없다. Java의 경우 final 상수는 선언할 때 초기화해야 한다. final 상수는 static 키워드의 사용에 따라 static 속성의 사용 여부를 결정할 수 있다.

5. native

native 라는 지시자는 C로 작성된 함수를 호출 합니다.

public class Date {
   int now;

   public Date() {
       now = time();
   }

   private native int time(); //  -> C code

   static {
       System.loadLibrary(“schedules”);   // -> schedules.dll(library)
   }
}

출전 : http://kin.naver.com/detail/detail.php?d1id=1&dir_id=10106&eid=ywH9W2i0olcZV2AiGlqMjC1FekeNyNTK&qb=bmF0aXZlIGphdmE=&pid=ftimwloQsDlssv8Qayosss--505751&sid=SBZhwmtXFkgAAD8fDBI