본문 바로가기
JAVA

12. this()와 this

by seongju.lee 2022. 9. 24.

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