티스토리 뷰
Goal
- this에 대해 알아본다.
- this의 기능을 실제 코드를 통해 알아본다.
밑의 문장과 그림을 이해 할 수 있으면 this는 어렵지 않다.
this가 가르키는 값은 heap메모리에 있는 인스턴스의 값을 참조하는 변수(day)가 가르키는 값과 같다.
이게 무슨 의미인지 this의 역할을 살펴보면서 이해하자.
1. this의 역할 3가지
- 자신의 메모리를 가리킴
- 생성자에서 다른 생성자를 호출 함
- 인스턴스 자신의 주소를 반환
1-1 자신의 메모리를 가리키는 this
- 메서드를 통해 인스턴스 변수의 값을 할당해 줄때 this 키워드를 사용하는 경우가 많다
public class Subject {
String name;
int score;
public Subject (String name, int score) {
this.name = name;
this.score = score;
}
}
- 위의 코드를 해석하면, Subject 클래스를 인스턴스로 생성할 때, 생성자에 인자값으로 name과 score를 입력하여, 인스턴스 변수인 name과 score에 값을 셋팅해주는 것을 알 수 있다.
- 이때, Subject 생성자를 정의하는 메서드에 this 키워드를 명시함으로서, name과 score는 생성자를 통해 구현되는 현재 인스턴스의 변수임을 가르킨다.
- this 키워드가 없으면, name과 score변수는 Subject 생성자 안에서만 사용되는 지역변수로 인식되고, 실제 인스턴스 변수의 값을 변경하지 않게 된다.
1-2 생성자에서 다른 생성자를 호출하는 this
- this.variable 형태로 쓰면, 자기 자신의 변수임을 나타내고
- this() 형태로 쓰면 자신의 생성자를 의미한다.
- 생성자에서 다른 생성자를 호출하는 작업을 수행할때는 다른 생성자를 호출하는 선언이 항상 다른 선언보다 우선시 되야 한다.
public class Person {
String name;
int age;
public Person() { //defalut 생성자에서 this 키워드롤 통해 Person(String name, int age)생성자를 불러옴.
this("noName", 1); // Constructor call must be the first statement in a constructor
}
public Person (String name, int age) {
this.name = name;
this.age = age;
}
public void showInfo() {
System.out.println(name + "," + age);
}
}
public class PersonTest {
public static void main(String[] args) {
Person personNoname = new Person(); //기본 생성자에서 다른 생성자를 호출하고 있기 때문에 출력값은 다름
personNoname.showInfo();
Person personLee = new Person("Lee", 20);
personLee.showInfo();
}
}
1-3 인스턴스 자신의 주소를 반환하는 this
- this형태로 쓰면, 주소값을 지니고있는 참조변수의 역할을한다.
- 즉, this는 현재 인스턴스의 값을 가르키는 참조변수이다.
public class Person {
public Person getSelf() {
return this;
}
public static void main(String[] args) {
Person personLee = new Person();
Person p = personLee.getSelf();
System.out.println(p);
System.out.println(personLee);
}
}
- 위 코드의 실행결과, personLee의 주소값이 출력되며 p에는 this의 주소값이 담겨있기 때문에 p와 personLee의 주소값은 같다.
'Java > Java 올인원 패키지' 카테고리의 다른 글
8. static 변수, 메서드 (Java) (0) | 2020.03.14 |
---|---|
7. 객체 간 협력 (0) | 2020.03.14 |
5. 접근 제어자, 정보은닉 (Java) (0) | 2020.03.14 |
4. 참조 자료형 (reference data type) (0) | 2020.03.14 |
3. 생성자 (Java) (0) | 2020.03.14 |
- 20200330
- 20200424
- 20200429
- 20200428
- 20200622
- 20200512
- 20200425
- chapter7
- 20200413
- 20200417
- 20200423
- 20200406
- 생활코딩리눅스
- 20200504
- 20200403
- 20200804
- 20200624
- likelion
- 20200427
- 20200317
- 20200420
- chapter8
- 20200503
- 20201204
- 20200415
- 20200421
- 20200502
- 20200319
- 20200510
- 백준
- Total
- Today
- Yesterday