안드로이드 개발 질문/답변
(글 수 45,052)
안녕하세요
구글에서 만든 안드로이드용 라이브러리를 분석하기 위해 소스 디컴파일해서 분석하고 있는 중입니다.
다른 소스는 함수명도 정확하고 소스에 모두 구현된 함수인데 NetworkDispatcher.DispatcherThread.access$402() 함수가 좀 특이합니다.
실제 DispatcherThread 클래스에 access$402 함수 구현부가 없습니다. 소스 전체에도 위 함수가 구현된 곳은 없고요.
그래서 보니 private static class DispatcherThread extends HandlerThread 로 선언되어 있고 HandlerThread 부모 클래스에서 구현된
함수라 생각했습니다. HandlerThread 소스는 import android.os.HandlerThread; 패키지에 포함된 것이더군요.
구글링검색해서 위 클래스 구현소스를 보았지만, access$402() 함수가 구현된
것은 보이지 않았습니다. 이 함수가 뭐하는 기능인지 알고 싶은데 방법이 있을까요?




아마도 그건 내부 클래스(예를 들면 Runnable 같은 거죠) 에서 외부 클래스의 클래스 변수나 메소드를 참조할 때 사용하는 걸 겁니다.
내부클래스에서는 외부클래스 변수/메소드를 참조할 수 있는 dalvik 바이트코드가 없거든요.
그래서 그런식으로 static 메소드를 호출해서 참조변수를 반환받는 식으로 처리하는 겁니다.
http://developer.android.com/guide/practices/design/performance.html
간단한 예를 만들어서 컴파일했다가 disassemble 해서 확인해 보세요.