this()와 this
- 생성자 this()와 참조변수 this는 완전히 다른 것이다.
생성자 this()
- this(), this(매개변수)는 생성자로, 생성자에서 같은 클래스에 있는 다른 생성자를 호출할 때 사용된다.
- 다른 생성자 호출 시, 생성자 내 첫 줄에서만 사용 가능하다.
class Car2 {
String color;
String gearType;
int door;
Car2() {
color = "white";
gearType = "auto";
door = 4;
}
Car2(String c, String g, int d){
color = c;
gearType = g;
door = d;
}
}
- 위 코드에서 기본생성자와, 매개변수가 있는 생성자 두 개를 선언했다.
- 사실 두 생성자는 동일한 기능을 하는 생성자이고, 코드가 중복된 것을 확인할 수 있다.
- 위 코드 중복을 this()를 사용하여 중복을 제거하면 아래와 같다.
Car2() {
this("white", "auto", 4);
}
Car2(String c, String g, int d) {
color = c;
gearType = g;
door = d;
}
참조변수 this
- 참조변수 this는 인스턴스 자신을 가리키는 참조변수이다.
- 인스턴스 메서드(생성자도 포함)에서 사용 가능.
- 지역변수와 인스턴스 변수를 구별하기 위해서 주로 사용.
class MyMath2 {
long a, b; // 인스턴스 변수
// 생성자
MyMath2(int a, int b) {
this.a = a; // this 생략 불가
this.b = b;
}
// 인스턴스 메서드
long add() {
return a+b;
}
// statc 메서드
static long add(long a, long b) {
/* this 사용불가 --> why? static 메서드는 인스턴스 변수를 사용할 수 없다.
* this는 참조변수로, 인스턴스 자기자신을 가리키는데, 객체가 생성이 되었는 지 보장할 수 없기 때문.
*/
return a+b;
}
}
- this는 인스턴스 주소가 저장되어 있는 참조변수이기 때문에, 모든 인스턴스 메서드에 지역 변수로 숨겨진 채로 존재한다.
- static 메서드에서 인스턴스 변수를 사용하지 못하는 이유와 동일하게 this도 당연히 사용할 수 없다.
- 인스턴스를 가리키는 참조변수이지만, 객체가 생성되었는 지 보장할 수가 없기 때문이다.
'JAVA' 카테고리의 다른 글
14. 상속과 포함 (0) | 2022.10.02 |
---|---|
13. 멤버변수의 초기화 (0) | 2022.09.25 |
12. 생성자, 기본 생성자 (0) | 2022.09.24 |
11. static 메서드와 instance 메서드 (0) | 2022.09.20 |
10. 참조형 반환타입 (0) | 2022.09.20 |