목차
<this 예약어>
요약
this예약어는 다음과 같이 활용된다.
1. 자신의 메모리를 카리키는 this.
2. 생성자에서 다른 생성자를 호출하는 this.
3. 자신의 주소를 반환하는 this.
1. 자신의 메모리를 카리키는 this.
this는 간단히 설명하면 생성된 인스턴스 스스로를 가리키는 예약어.
package thisEx;
class BirthDay {
int day;
int montth;
int year;
public void setYear(int year) {
this.year = year; // bDay.year = year;와 같음
}
public void printThis() {
System.out.println(this); // this 출력 메서드 (System.out.println(bDay)와 같다)
}
}
public class ThisExample {
public static void main(String[]args) {
BirthDay bDay = new BirthDay();
bDay.setYear(2000);
System.out.println(bDay);// thisEx.BirthDay@707f7052 참조변수의 메모리 주소 출력
bDay.printThis(); // thisEx.BirthDay@707f7052 this의 메모리주소 출력 메서드 호출
}
}
※public클래스는 파일에 하나만 존재할 수 있으며, public클래스와 자바 파일 이름은 같아야한다.
이러한 조건으로 간단한 클래스를 활용하는 경우 하나의 자바 파일에 여러개의 클래스가 존재할 수도 있다.
참조 변수 = 인스턴스를 가리키는 변수 (위에서는 bDay가 참조 변수)
참조 변수를 출력하면 '클래스 이름@메모리 주소' 값이 나온다.
main()는 ThisExample클래쓰의 시작 메서드.
그림을 보면 bDay변수가 가리키는 인스턴스와 BirthDay클래스의 setYear()메서드에서 this가 가리키는 인스턴스가 같은 곳에 있음을 알 수 있다.
2. 생성자에서 (같은 클래스의) 다른 생성자를 호출하는 this.
클래스에 생성자가 여러 개 있을 때, 한 생성자에서 다른 생성자를 호출하는 경우에 this를 사용해 호출할 수 있다.
package thisEx;
class Person{
String name;
int age;
Person() {
this("이름 없음", 31); // this를 사용해 Person(String, int)생성자를 호출함
}
Person(String name, int age){
this.name = name;
this.age = age;
}
}
public class CallAnotherConst {
public static void main(String[] args) {
Person noName = new Person(); //noName이라는 인스턴스 생성 (Person()생성자)
System.out.println(noName.name); // 이름없음 출력
System.out.println(noName.age); // 31 출력
}
}
Person() 디폴트 생성자 / Person(String, int) 두가지 생성자가 있다.
Person() 생성자를 호출할 때 초깃값을 대입하고 싶을 때, 위 처럼 this생성자를 활용해 다른 생성자를 호출할 수 있다.
※주의점 :
this를 사용하여 생성자를 호출하는 코드 이전에 다른 코드를 넣을 수 없다.
만약 다른 코드를 넣으면 오류가 발생한다.
(생성자는 클래스가 생성될 때 호출 됨.
따라서 클래스 생성이 완료되지 않은 시점에서 다른 코드가 있다면 오류가 발생할 수 있다.
즉 디폴트 생성자에서 생성이 완료된 것이 아니라 this를 사용해 다른 생성자를 호출하므로, 이때는 this문이 가장 먼저 위치해야 한다.)
3. 자신의 주소를 반환하는 this.
this를 사용하여 생성된 클래스 자신의 주소 값을 반환할 수 있다.
인스턴스 주소 값을 반환할 때는 this문을 사용하고 반환형은 클래스 자료형을 사용.
package thisEx;
class Person{
String name;
int age;
Person() {
this("이름 없음", 31); // this를 사용해 Person(String, int)생성자를 호출함
}
Person(String name, int age){
this.name = name;
this.age = age;
}
Person returnItSelf() { // 반환형이 클래스형인 returnItSelf라는 메서드를 생성
return this; // this를 반환
}
}
public class CallAnotherConst {
public static void main(String[] args) {
Person noName = new Person(); //noName이라는 인스턴스 생성 (Person()생성자)
System.out.println(noName.name); // 이름없음 출력
System.out.println(noName.age); // 31 출력
Person p = noName.returnItSelf(); // this값을 반환하는 변수(returnItSelf())를 클래스 변수(p)에 대입.
System.out.println(p); // noName.returnItSelf()의 반환 값(thisEx.Person@707f7052) 출력
System.out.println(noName); // 참조 변수(thisEx.Person@707f7052) 출력
}
}
this를 반환하는 메서드를 사용할 일이 흔치는 않음.
주소 값을 반환할 수 있다는 것만 알아두면 됨.
[Do it! 자바 프로그래밍 입문] 도서로 공부하며 정리한 글입니다.