참조변수 this
- 인스턴스 자신을 가리키는 참조변수. 인스턴스의 주소가 저장되어 있다.
- 생성자를 포함한 모든 인스턴스메서드에는 참조변수 'this'가 지역변수로 숨겨진 채로 존재한다.
- ex. long a, b; -> this.a, this.b 가 진짜 이름이지만 this를 생략해서 사용 가능하다.
- static메서드 에서는 this 사용불가하다. 인스턴스멤버만 this를 사용할 수 있다.
- 생성자와 모든 인스턴스메서드 내에서 사용가능하다.
this(), this(매개변수)
- 생성자. 같은 클래스의 다른 생성자를 호출할 때 사용한다.
* this와 this()는 비슷하게 생겼을 뿐 완전히 다른 것이다.
this는 '참조변수'이고 this()는 '생성자'이다.
this : 인스턴스 자신을 가리키는 참조변수. 인스턴스의 주소가 저장되어 있다.
모든 인스턴스 메서드에 지역변수로 숨겨진 채로 존재한다.
this(), this(매개변수) : 생성자. 같은 클래스의 다른 생성자를 호출할 때 사용한다.
아래 예시를 통해 더 자세히 알아보자.
this(), this(매개변수)의 사용법 : 생성자에서 다른 생성자 호출하기
생성자 간 호출하기 위한 조건
1. 생성자의 이름으로 클래스 이름 대신 this를 사용 ( = this() ) 한다.
2. 한 생성자에서 다른 생성자를 호출할 때는 반드시 첫줄에서만 호출이 가능하다.
// 1. 잘못된 다른생성자 호출방법
Car(String color){
door= 5;
Car(color,"auto",4);
// 1) 생성자의 첫번째줄이 아닌 두번째줄에서 호출됨 (첫번째줄에서 호출해아함)
// 2) this(color, "auto",4)로 호출해야함 (생성자의 이름으로 클래스이름 대신 this사용)
}
// 2. 올바른 다른생성자 호출방법
Car(String color){
this(color,"auto",4);
}
- 생성자에서 다른 생성자를 호출할 때는 클래스 이름인 'Car'대신 'this'를 사용해야 하고, 첫번째줄에서 호출해야 한다.
- 첫 줄에서만 호출이 가능하도록 한 이유는 생성자 내에서 초기화 작업도중에 다른 생성자를 호출하게 되면, 호출된 다른 생성자 내에서도 멤버변수들의 값을 초기화 할 것이므로 다른 생성자를 호출하기 이전의 초기화 작업이 무의미해질수도 있기 때문이다.
class Car{
String color;
String gearType;
int door;
Car(){
this("white","auto",4); //Car(String color, String gearType, int door)를 호출
/* 아래와 동일한 코드지만 더 간략하게 활용 가능
color = "white";
gearType= "auto";
door= 4;
*/
}
Car(String color){
this(color, "auto",4);
}
Car(String color, String gearType, int door){
this.color= color;
this.gearType = gearType;
this.door= door;
}
}
class CarTest2{
public static void main(String[] args){
Car c1= new Car();
Car c2 = new Car("blue");
}
}
this 의 사용법 : 인스턴스변수와 지역변수 구별하기
1. 인스턴스 변수명 지역변수명이 다른경우 : 문제없이 사용가능
- color= c; 는 생성자의 매개변수로 선언된 지역변수 c의 값을 인스턴스변수 color에 저장한다.
- 변수 color와 c는 이름만으로 인스턴스 변수인지 지역변수인지 구분이 가능하기 때문에 아무런 문제가 없다.
2. 인스턴스 변수명과 지역변수명이 같은 경우: 이름만으로 구별 불가. 문제 발생
- 매개변수로 선언된 지역변수와 인스턴스 변수가 color로 같을 경우에는 이름만으로는 두 변수가 구별이 안된다.
- 이런 경우에 인스턴수 변수 앞에 'this'를 사용하면 된다.
인스턴스 변수, 지역변수, 클래스변수가 헷갈린다면 아래 링크 참조하여 다시 공부
https://hyun-1200.tistory.com/4
3. 인스턴스 변수명과 지역변수명이 같지만, 인스턴스 변수명에 this를 붙여 구별 : 문제없이 사용 가능
1번과 3번은 같은 코드이다.
생성자의 매개변수명과 인스턴스 변수명이 일치하는 경우가 자주있으므로, 1번 코드보다 3번 코드를 사용하는것이 의미가 더 명확하고 이해하기가 쉽다.
'JAVA > JAVA 기본정리' 카테고리의 다른 글
ArrayList : 저장 순서가 유지되고 중복을 허용하는 컬렉션 클래스 (0) | 2022.05.08 |
---|---|
컬렉션 프레임웍 / Collection인터페이스 / List / Set/ Map (0) | 2022.05.08 |
생성자 ( Constructor) / 기본생성자/ 매개변수가 있는 생성자 (0) | 2022.04.25 |
오버로딩 (overloading) / 가변인자(varargs) : 매개변수 개수를 동적으로 사용할 수 있는 기능 (0) | 2022.04.25 |
클래스메서드(static 메서드) 와 인스턴스 메서드 / 클래스멤버와 인스턴스멤버간의 참조와 호출 (0) | 2022.04.25 |