this 키워드는 인스턴스 자기 자신이라고 간단히 말할 수 있다.
좀 더 자세하게 말해서 인스턴스 자기 자신의 메모리 주소를 담고 있는(가리키고 있는) 키워드이다.
인스턴스 생성시 참조 변수값과 this 값은 같을까?
객체를 생성할 때, 참조변수가 객체의 주소를 참조하며, this 또한 인스턴스의 주소를 가리킨다고 하였다. 그래서 값이 같은지 확인하기 위해서 다음과 같은 코드를 작성하였다.
class Person{
String name;
String mbti;
int age;
void print(){
System.out.println("this 참조변수 값 : " + this);
}
}
Person 클래스에는 세개의 필드와, this 참조 변수 값을 출력하는 메소드를 작성하였다.
public class ThisTest {
public static void main(String[] args) {
Person p1 = new Person();
p1.print();
System.out.println("p1값 : " + p1);
Person p2 = new Person();
p2.print();
System.out.println("p2값 : " + p2);
}
}
Person 클래스로부터 객체 두개를 생성하고 각각 p1 , p2 참조변수를 통해 각각 그 객체의 주소값을 가리키었다.
그리고 생성한 객체에 있는 메소드 print()를 호출하고, p1 값을 출력해보았다.
예상대로 this 값과 p1은 모두 인스턴스의 주소값을 출력하였고, 객체 마다 다른 값을 출력하였다.
모든 메서드에는 자신이 포함된 클래스의 객체를 가리키는 this라는 참조 변수가 있으며, 인스턴스의 메서드에 지역 변수로 숨겨진 채로 존재한다.
public class ThisTest {
public static void main(String[] args) {
Person p1 = new Person();
p1.name = "강은서";
p1.print();
}
}
class Person{
String name;
String mbti;
int age;
void print(){
System.out.println(this.name);
System.out.println(name);
}
}
print 메서드에 this.name과 name을 출력하여 지역 변수로 숨겨져 있는지 확인해보았다.
예상대로 같은 값을 출력하였다
이러한 this 참조 변수의 특징에 따라 this 참조 변수는 생성자의 매개변수 이름과 인스턴스 변수의 이름을 구분하고자 인스턴스 변수 앞에 this 키워드를 붙여 구분한다.
this 참조 변수는 인스턴스가 생성된 후에 사용되기 때문에 this 참조 변수를 사용할 수 있는 영역은 인스턴스 메소드뿐이며, 클래스 메소드에는 사용할 수 없다.
'Language > Java' 카테고리의 다른 글
[Java] Collection 프레임워크 (0) | 2023.05.15 |
---|---|
[Java/ERROR] ConcurrentModificationException (0) | 2022.12.09 |
[Java] Object 클래스 메소드 - toString() (0) | 2022.11.07 |
[Java] Object 클래스 (0) | 2022.11.07 |
[Java] 기타 제어자 (0) | 2022.11.07 |