기본 콘텐츠로 건너뛰기

라벨이 outer class인 게시물 표시

[ JAVA ] Decompile 된 코드에서 this.val$xxx 는 어떻게 해석해야 할까?

  좋은 방법도 아니고 하지 않는 것이 좋기는 하지만 제대로 된 정보를 구할 수 없는 경우에 어쩔 수 없이 외부 jar 파일에서 원하는 기능과 유사한 기능을 구현한  코드를 검토해 봐야할 수 밖에는 없는 경우가 존재한다.  이럴 때는 Decompiler를 사용하여 원본에 근사치의 코드를 얻을 수 있다. Eclipse 에 Decompiler 를  설정하는 부분은 이전 게시글 에 서 설명을 했었다.    이 때 Decompile 된 코드를 검토하다 보면 허걱스런 코드들이 존재하는 것을 볼 수 있다. 여러 가지 상황들이 있지만 많이 만나게 되는 "this.val$xxx" 코드가  한 가지 예라고 볼 수 있다. 이런 경우는 어떻게 해석을 해야할까?   자바 스펙 ( http://docs.oracle.com/javase/specs/jls/se5.0/html/lexical.html#3.8) 에 의하면 '$' 는 변수명으로 사용할 수 있는 문자이지만  다음과 같은 추가 설명이 존재한다. The $ character should be used only in mechanically generated source code or, rarely, to access preexisting names on legacy systems.   위의 문장을 따르면 기계적으로 생성된 소스 코드 또는 극히 일부 기존 시스템의 이미 존재하는 이름을 참조하기 위해서만 사용하여야 한다는 제한적인 의미가 된다. 왜? 이런 제한이 있어야 하는 것일까? (정확한 것이라고 할 수는 없지만 아래와 같이 이해할수 있을것 같다) 내부적인 클래스가 존재하는 것과 같이 인식 되는 경우 - 익명 클래스등과 같은 내부에 Inner Class가 존재하는 경우에 외부 클래스와 내부 클래스를 식별하기 위한 방식으로 outerclass$innerclass 로 사용 된다. 이와 같은 이유로 인해서 메서드의 내부에 익명 클래스가 사용되는 경우도 역시 마찬가지로 적용된다. 난