1. this 키워드 란?
1) 개념
this는 인스턴스의 자기 자신을 의미한다. 아래 3가지 역할을 보면 쉽게 이해가 될 것이다.
2) this 키워드의 역할
① 자기 자신의 메모리를 가르킨다.
② 생성자에서 다른 생성자를 호출할 경우 사용한다.
③ 인스턴스 자신의 주소를 반환할 때 사용한다.
2.1) 자기 자신의 메모리를 가르킨다.
main 함수에서 Student 객체를 하나 생성한 후 학번, 이름을 Setter를 통해 값을 입력했다고 가정한다.
public class StudentTest {
public static void main(String[] args) {
Student studentPark = new Student();
studentPark.setStudentID(150);
studentPark.setStudentName("피망");
}
}
학생의 정보를 저장하는 Student 클래스에서 멤버 변수를 선언한 이후 Setter를 설정할 때 this.변수명 = 매개 변수 명으로 지정한다.이때 this 키워드는 자기 자신의 메모리를 가르키기 때문에 멤버변수의 studentID랑 동일한 의미가 된다.
public class Student {
private int studentID; //학번
private String studentName; //학생 이름
public void setStudentID(int studentID) {
this.studentID = studentID;
}
public void setStudentName(String studentName) {
this.studentName = studentName;
}
}
this를 사용하지 않으면 어떻게 되나요?
매개변수 이름과 대입하는 이름이 똑같기 때문에 구분할 수 없어서 에러가 발생한다.
매개변수의 이름을 멤버 변수와 다른 이름으로 설정한다면 this 키워드를 쓰지 않아도 된다. 하지만 가독성을 위해 매개 변수 명과 멤버 변수를 동일하게 쓰는것을 권장하고 있다.
2.2) 생성자에서 다른 생성자를 호출할 경우 사용한다.
학생의 정보를 저장하는 Student 클래스에서 매개 변수가 없는 생성자, 매개 변수가 있는 생성자 2개를 생성한 후 매개 변수가 없는 생성자에 this 키워드를 이용하여 값을 넣을 경우 매개 변수가 있는 생성자를 참조하여 메인 함수에서 생성자를 호출할 때 해당 값이 자동으로 대입된다.
public class Student {
private int studentID; //학번
private String studentName; //학생 이름
public Student() {
this(150, "피망");
}
public Student(int studentID, String studentName) {
this.studentID = studentID;
this.studentName = studentName;
}
public void showInfo() {
System.out.println("학번: " + studentID);
System.out.println("이름: " + studentName);
}
메인 함수에서 객체를 생성하고 값을 대입하지 않고 출력할 경우 자동으로 생성자에서 대입 된 값이 출력되는것을 확인할 수 있다.
package classpart;
public class StudentTest {
public static void main(String[] args) {
Student studentPark = new Student();
studentPark.showInfo();
}
}
생성자를 호출할 때 값을 대입하면 대입된 값으로 출력된것을 확인할 수 있다.
public class StudentTest {
public static void main(String[] args) {
Student studentPark = new Student();
studentPark.showInfo();
Student studentLee = new Student(200, "Lee");
studentLee.showInfo();
}
}
매개 변수가 없는 생성자에서 this를 사용하여 다른 생성자를 호출할 경우 해당 구문이 첫번째 구문이 되어야 한다.
this 키워드 위에 다른 구문을 작성할 경우 에러가 발생한다.
public Student() {
studentID = 100;
this(150, "피망");
}
2.3) 인스턴스 자신의 주소를 반환할 때 사용한다.
Student 클래스에서 반환 타입을 Student로 설정한 getSelf 메서드에서 반환 시 this를 반환한다.
public class Student {
private int studentID; //학번
private String studentName; //학생 이름
public Student(int studentID, String studentName) {
this.studentID = studentID;
this.studentName = studentName;
}
public Student getSelf() {
return this;
}
}
메인 함수에서 Student 객체를 생성하고 해당 객체 정보 출력 및 test 객체를 하나 더 만들어서 해당 객체에 이전에 생성한 객체의 this 반환 값을 대입한다.
public class StudentTest {
public static void main(String[] args) {
Student studentPark = new Student(200, "Park");
System.out.println(studentPark);
Student test = studentPark.getSelf();
System.out.println(test);
}
}
출력할 경우 같은 값이 출력되는것을 확인할 수 있다.
this가 가르치는 위치와 생성된 객체가 가르치는 위치가 같은 것을 확인할 수 있다.
'Language > JAVA' 카테고리의 다른 글
[JAVA] 싱글턴 패턴(Singleton pattern) 개념 및 구현 (3) | 2021.02.16 |
---|---|
[JAVA] static 변수, 메서드 개념 및 구현 (0) | 2021.02.16 |
[JAVA]접근 제어자(Access modifier) 개념 및 구현 (0) | 2021.02.14 |
[JAVA] 참조 자료형(Reference data type) 개념 및 구현 (0) | 2021.02.14 |
[JAVA]생성자(Constructor), 생성자 오버로딩(Overloading) 개념 및 구현 (0) | 2021.02.14 |
공부&일상 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요! 질문은 언제나 환영입니다😊