Java | This
This
생성된 인스턴스(객체) 스스로를 가리키는 예약어
멤버 변수와 메서드 매개변수의 이름이 같을 경우에 컴퓨터가 구분하지 못하는 경우 발생
→ 멤버 변수 이름 앞에 this 작성
① 자신의 인스턴스를 가리키는 This
main()에서 같은 클래스를 이용해서 서로 다른 이름의 객체를 생성하더라도
각각의 객체 내의 메소드와 멤버 변수를 스스로의 객체에서 찾을 수 있도록 this를 사용
참조 변수
인스턴스를 가리키는 변수, '클래스 이름@메모리 주소'가 출력됨
public class ThisTest2 {
// 기본 생성자
ThisTest2(){
// 자기 객체의 참조 변수를 출력할 수 있도록 this 사용
System.out.println("현재 생성된 객체: " + this);
}
public static void main(String[] args) {
ThisTest2 tt = new ThisTest2();
System.out.println("main()에서 생성된 tt객체: " + tt);
/* 현재 생성된 객체: j200122.ThisTest2@15db9742
main()에서 생성된 tt객체: j200122.ThisTest2@15db9742 */
ThisTest2 tt2 = new ThisTest2();
System.out.println("main()에서 생성된 tt2객체: " + tt2);
/* 현재 생성된 객체: j200122.ThisTest2@6d06d69c
main()에서 생성된 tt2객체: j200122.ThisTest2@6d06d69c */
}
}
※ 기본 생성자 내부에 작성된 this가 생성된 객체에 따라 다른 참조 변수를 가리킴
사용례
public class ThisTest {
private int a = 100;
public void setA(int a) {
this.a = a; /* a = a; 로 작성하면 setA()로 값을 저장하지 못하고
100이 출력됨 */
}
public int getA() {
return a;
}
public static void main(String[] args) {
// 객체 생성
ThisTest tt = new ThisTest();
/* this.a = a; 에서 this는 tt 인스턴스(객체)를 가리키며,
여러 개의 객체가 생성된 경우, 각각의 객체를 지시함 */
tt.setA(2);
int get = tt.getA();
System.out.println(get); // 2
}
}
② 생성자에서 다른 생성자를 호출하는 This
클래스에 생성자가 여러 개 있을 때 생성자에서 다른 생성자를 호출할 때 this 사용 가능
생성자 호출 This_주의 사항
this를 사용하여 생성자를 호출하는 코드 이전에 다른 코드 작성 불가
기본 생성자에서 생성이 완료되는 것이 아니라
this를 사용해 다른 생성자를 호출하므로, this가 가장 먼저 와야 함→ 클래스 생성이 완료되지 않은 시점에 다른 코드가 있다면 오류 발생
Constructor call must be the first statement in a constructor
public class CnstCall {
String name;
int age;
CnstCall() {
this("김덕배", 22);
}
CnstCall(String name, int age) {
this.name = name;
this.age = age;
System.out.println("이름: " + name + ", 나이:" + age);
}
public static void main(String[] args) {
CnstCall cc = new CnstCall();
// 이름: 김덕배, 나이:22
}
}
※ 생성자 호출시 호출된 생성자의 모든 코드가 실행됨
간단해 보이지만 어려운 개념인 this에 대해 살펴보았습니다.
this에 대해 꼭 알아 두어야 하는 것은 this의 값이 객체(인스턴스)의 참조 변수를 가리킨다는 것입니다.
생성자 호출 this 역시 생성자가 속한 객체에 있는 또 다른 생성자에 매개변수를 전달하면서 호출하는 것이기 때문에
this는 자기 자신의 객체를 가리킨다는 점만 이해하면 될 것 같습니다.