기본이되는 내용이지만 짚고 가야할 내용이라 정리해두었다.



 일반적으로 Primitive Type 대해서 final 선언되면 해당 객체를 바꿀 없지만, Object 경우 final 선언되면 해당 객체 혹은 해당 객체 멤버의 내용은 바꿀 있다.


 Object 앞에 선언되는 final 의미는 해당 객체를 가리키는 포인터를 바꿀 없게 하는 의미로, 해당 이름으로 객체의 선언 / 재할당을 막는 다는 의미가 된다.


(ex)

Public foo(Obj_1 Obj1, final Obj_2 obj2){

             Obj1 = new Obj_1();      //가능

             Obj2 = new Obj_2();      //불가능

             Obj1.setId(12345);         //가능

             Obj2.setId(12345);         //가능

}


 시스템이 굉장히 복잡하다고 가정했을 , 특히 멀티 쓰레드 환경에서 Thread Safe 하지 않은 객체에 대해 자바 가상 머신의 예기치 못한 동작으로 특정 메모리 영역의 객체는 얼마든지 다른 객체로 변할 여지가 있다.


이는 개발자 입장에서는 버그이지만 JVM입장에서는 버그가 아닌 동작일 있다. 그런 경우를 방지하기 위해 메모리를 참조하는 주소를 final 키워드를 이용해서 고정시켜놓으면 그러한 불상사를 예방할 있다.


+ Recent posts