IT 포스팅 2013. 3. 7. 18:03

<자바의 신> VOL.1의 8장을 보면 this를 이렇게 설명하고 있습니다.


this라는 예약어는 영어 단어의 의미 그대로 “이 객체”의 의미다. 하지만, 자바에는 that이라는 예약어는 없다(좀 썰렁한가?). this 예약어는 생성자와 메소드 안에서 사용할 수 있다. 앞장에서 살펴본 생성자 중에서 매개 변수를 하나만 받는 생성자를 다시 살펴보자.


이 코드에 this라는 것이 없으면 어떨까?


여러분들이 자바에서 컴파일을 하는 컴파일러(javac)라고 생각해보자. 인스턴스 변수인 name도 있고 매개 변수로 넘어온 name도 있다. 여러분들의 마음은 앞에 있는 name은 인스턴스 변수인 name으로 생각하게 하고, 뒤에 있는 name은 매개 변수인 name으로 생각하고 싶을 것이다. 하지만, 컴파일러는 여러분들의 마음처럼 쉽게 움직여 주질 않는다. 생성자 안에서 사용하는 변수이기 때문에 중괄호 안에 있는 name은 모두 매개 변수로 넘겨준 name이라고 생각한다. 이러한 혼동을 가장 쉽게 피하는 방법은 매개 변수와 인스턴스 변수의 이름을 다음과 같이 다르게 하는 것이다.


이렇게 이름을 다르게 하면 쉽게 구분이 되기 때문에 여러분들도 컴파일러도 혼동되지 않을 것이다. 하지만, 이렇게 이름을 구분하는 것보다 간단한 방법이 this라는 예약어를 사용하는 것이다. 처음에 살펴본 생성자를 다시 보자.

이렇게 this.name이라고 지정해 주면, 매개 변수 안에 있는 name이 아닌 “이 객체의 name”이라고 명시적으로 지정해 준다. 그러면, 컴파일러나 여러분들도 쉽게 구분이 될 것이다. this라는 키워드는 이렇게 변수에만 지정할 수 있는 것은 아니다. 메소드에도 this를 지정할 수 있다. 여러분들이 아직 상속에 대해서 배우지 않았기 때문에 메소드에 this를 붙이는 것은 다음 장에서 자바의 상속을 배운 후에 살펴보자.


이제 자바의 예약어 this가 뭔지 아시겠죠? 헷갈리지 마세요. ^^





posted by 로드북
: