본문 바로가기

Language/Java

[Java] this 예약어

this의 역할 알아보자.

 

 자신의 메모리를 가리키는 this 

this는 생성된 인스턴스 스스로를 가리키는 예약어이다.

 

[실습] this 출력하기
package thisex;

class BirthDay {
	int day;
	int month;
	int year;
	
	public void setYear(int year) { //태어난 연도를 지정하는 메서드
		this.year = year;
	}
	
	public void printThis() {
		System.out.println(this);  //this 출력 메서드
	}
}

public class ThisExample {
	public static void main(String[] args) {
		BirthDay bDay = new BirthDay();
		bDay.setYear(2000);         //태어난 연도 2000으로 지정
		System.out.println(bDay);   //참조 변수 출력
		bDay.printThis();           //this 출력 메서드 호출
	}
}

 

인스턴스를 가리키는 변수가 참조 변수이며, 참조 변수를 출력하면 '클래스 이름@메모리 주소' 문자열 값이 나오는데

위의 출력 결과를 보면 bDay.printThis() 메서드를 호출하여 출력한 this 값과 참조 변수 bDay를 출력한 값이 같다.

즉, 클래스 코드에서 사용하는 this는 생성된 인스턴스 자신을 가리키는 역할을 한다.

 

 

 

 

 생성자에서 다른 생성자를 호출하는 this 

클래스에 생성자가 여러 개 있을 때 어떤 생성자에서 다른 생성자를 호출하는 경우가 종종 있는데, 이때 this를 사용해 호출이 가능하다.

 

[실습] this로 다른 생성자 호출하기
package thisex;

class Person {
	String name;
	int age;
	
	Person(){
		this("이름 없음", 1);  //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();
		System.out.println(noName.name);
		System.out.println(noName.age);
	}
}

 

Person 클래스에는 Person() 디폴트 생성자와 매개변수를 가지는 Person(String, int) 생성자가 있다. 

클래스가 생성될 때 Person(String, int)가 호출되어 이름과 나이를 전달받고, Person() 디폴트 생성자가 호출되는 경우에는 초기값으로 "이름 없음"과 1을 대입한다.

 

 

 

 

 자신의 주소를 반환하는 this 

this를 사용해서 생성된 클래스 자신의 주소 값을 반환할 수 있다.

인스턴스 주소값을 반환할 때는 this를 사용하고 반환형은 클래스 자료형을 사용한다.

 

[실습] this를 사용하여 주소 값 반환하기
package thisex;

class Person {
	String name;
	int age;
	
	Person(){
		this("이름 없음", 1);
	}
	
	Person(String name, int age) {
		this.name = name;
		this.age = age;
	}
	
	Person returnItSelf() {  //반환형은 클래스형
		return this;         //this 반환
	}
}

public class CallAnotherConst {
	public static void main(String[] args) {
		Person noName = new Person();
		System.out.println(noName.name);
		System.out.println(noName.age);
		
		Person p = noName.returnItSelf();  //this값을 클래스 변수에 대입
		System.out.println(p);             //noName.returnItSelf()의 반환 값 출력
		System.out.println(noName);        //참조 변수 출력
	}
}

 

this를 반환하는 메서드를 사용할 일이 흔하지 않지만, 클래스 자료형과 상관없이 클래스 내에서 this를 사용하면 자신의 주소 값을 반환할 수 있다.

 

'Language > Java' 카테고리의 다른 글

[Java] static 변수  (0) 2022.10.18
[Java] 객체 간 협력  (0) 2022.10.17
[Java] 정보 은닉  (0) 2022.10.10
[Java] 참조 자료형  (0) 2022.10.01
[Java] 생성자  (0) 2022.09.30