안드로이드 개발 질문/답변
(글 수 45,052)
안녕하세요 선후 입니다^^
public final int a = 10; 과
public final CLASS_A clA = new CLASS_A(); 는 다른것 같은데 맞는지 확실하지 않아서 질문글을 올립니다 ㅠㅠ
1. int a = 10 인 경우 a 는 앱이 동작하는 동안 영원히 10 인 것 같습니다.
2. 그러나 clA 같은 경우에는 객체만 final 이 되나 해당 객체의 내부 변수들은 final 안되어
잘활용할 수 있는것 같습니다.
- 제가 지금 생각하는 이론이 맞는지 궁금합니다.-
추가 질문 그런데 해당 객체나 변수를 final 로 지정해주면 동작이 좀더 빨라지는지 궁금합니다.

2012.06.07 11:11:07
선후님.... 상수 값으로 사용하실 때는 static final로 선언하시는 것이 좋습니다. 성능 향상이 이루어집니다.
왜냐하면 클래스 멤버 변수(필드)의 경우에는 클래스 초기화 과정에서 멤버 변수 만들고 값 집어 넣는 과정이 들어가고
사용할 때에도 클래스 멤버 변수에 접근해야 하니까요.
하지만 static final로 선언하면 사용하는 위치에 컴파일러가 상수 값을 집어 넣어 버립니다. 따라서 초기화 과정도 없고 클래스 멤버 변수에 접근할 일도 없겠죠.
다만 지역변수인 경우에는 final로 하든, 하지않든 성능은 차이 없습니다.




속도 문제는 모르겠으나 2번에 말씀하신거에 대해 말씀드리자면
객체에 final 적혀있는것은 C 포인터를 예로 들어 설명드리자면 객체변수에는 해당 객체의 메모리위치 주소만 적혀있기 때문에 그 주소값만 변경하지 못하게 됩니다.
그래서 그객체변수가 가르치는 객체에 속한 하위 변수라던지 함수라던지 등은 얼마든지 수정가능한것입니다.
고로 cIA 에 null 값을 넣는다던지 다시 한번 new CLASS_A(); 라고 한다던지 다른 CLASS_A() 인스턴트를 넣는다는 행위가 차단되는것입니다.