Anonymouse 객체에서 this 의 활용

프로그래밍/JAVA 2013. 9. 3. 21:45

Anonymouse 객체에서 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();
	}
}

끝.

: