Anonymouse 객체에서 this 의 활용
프로그래밍/JAVA 2013. 9. 3. 21:45Anonymouse 객체에서 this의 활용
꽤 오랜 시간동안 자바 프로그래밍을 해왔지만 오늘에서야 문득 의문스러운 점이 눈에 띄어서 적어봅니다.
아래코드는 단순히 "TestThisInThread" 를 콘솔화면에 출력하는 소스입니다.
public class TestThisInThread { private String name = "TestThisInThread"; public void printName(){ new Thread( new Runnable(){ public void run(){ System.out.println( this.name); } }).start(); } public static void main(String[] args) { new TestThisInThread().printName(); } }
의문스러운 점을 발견하셨나요?
전 당연히 "TestThisInThread" 가 콘솔 화면에 찍힐 줄 알았는데... 위 소스는 이클립스 상에서 컴파일이 되지 않습니다.
this 가 가리키는 객체가 제 생각처럼 단순하지가 않기 때문입니다...ㅠㅠ
위 소스를 자세히 들여다 보면 this 가 사용된 위치가 아래와 같습니다.
TestThisInThread
Runnable
this
this 는 Runnable 이 생성된 안쪽에서 사용되었습니다. 제 단순한 생각데로 TestThisInThread 를 가리키는게 아니라
this 는 Anonymous 로 생성된 Runnable 객체를 가리키게 됩니다. 하하
위 소스를 컴파일이 되도록 변경하기 위해서는 아래와 같이 수정하면 됩니다.
public class TestThisInThread { private String name = "TestThisInThread"; public void printName(){ new Thread( new Runnable(){ public void run(){ System.out.println( TestThisInThread.this.name); } }).start(); } public static void main(String[] args) { new TestThisInThread().printName(); } }
끝.
'프로그래밍 > JAVA' 카테고리의 다른 글
Apache Common BeanUtils (0) | 2017.07.21 |
---|---|
JSP 에서 변환되는 HTML 의 공백 제거하기 (0) | 2015.01.06 |
자바에서 지정된 시간에 수행되는 작업 만들기 (0) | 2013.09.24 |
자바에서 10진수를 16진수로 변환시 (0) | 2013.09.10 |
자바 정규표현식의 그룹 및 치환 (0) | 2013.08.19 |