글
안드로이드에서 final 을 자주 쓰는이유가 무엇일까요?
먼저 코드를 봅시다.
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class ButtonTestActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final Button btn = (Button) findViewById(R.id.Button01);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
btn.setText("clicked!");
}
});
}
}
여기서 final 을 쓴 이유가 무엇일까요?
저기서 final 을 쓰지 않으면 아래와 같은 오류가 납니다.
Cannot refer to a non-final variable btn inside an inner class defined in a different method
사실 처음에는 “final 을 쓰면 전역변수처럼 되나?” 라고 생각했는데 그렇다면 static 하고 비교가 애매해 집니다.
그리고 메모리관리 측면에서도 낭비가 되죠.
여기서 final 의 일반적인 정의를 좀 알아봅시다.
바로 “상수화” 시킨다는것 입니다.
사실 이 말은 프리미티브 타입에만 통하는 말입니다.
프리미티브 타입이 아닌 객체에는 “참조를 변경할수 없음” 이라는 말이 더 어울립니다.
결국 위의 소스에서 btn 이라는 변수의 참조가 변경되지 않기 때문에 컴파일러가 변수명이 아니라 참조주소로 바로 접근 가능하도록 할 수 있게 되는것 입니다.
이것은 전역변수는 아니고 “지역적 치환문” 정도로 생각하는게 좋을꺼 같습니다.
'알짜정보 > Android' 카테고리의 다른 글
안드로이드 Authenticator Service 만들기 (4) - SyncAdapter 구현 (27) | 2010.12.27 |
---|---|
안드로이드 Authenticator Service 만들기 (3) - AccountAuthenticatorActivity 를 이용한 UI 구현 (27) | 2010.12.24 |
안드로이드 Authenticator Service 만들기 (2) - AbstractAccountAuthenticator 구현하기 (35) | 2010.12.23 |
안드로이드 Authenticator Service 만들기 (1) - 계정등록하기 (45) | 2010.12.23 |
안드로이드 주소록 sync 구조 (27) | 2010.12.20 |
RECENT COMMENT