본문 바로가기

Java

Java 생성자 간 호출 this()와 객체 자신을 가리키는 참조변수 this

⭐️ this()와 this는 완전히 다른 것⭐️

 

 

1. this(): 생성자 간 호출 시 사용

  1) 필수 조건

    - 생성자 간 호출 시 클래스명 대신 this를 사용

    - 생성자 간 호출 시 반드시 첫 줄에서만 호출(초기화 작업 도중 다른 생성자 호출 시 이전  초기화 작업이 무의미해질 수 있기 때문) 

class Car {
	String color;	
	String gearType;	
	int door;			

	Car() { // Car 클래스의 기본 생성자
		this("white", "auto", 4); // Car(String color, String gearType, int door) 호출
	}

	Car(String color) { // Car 클래스의 매개변수가 1개인 생성자
		this(color, "auto", 4); // Car(String color, String gearType, int door) 호출
	}

	Car(String color, String gearType, int door) { // Car 클래스의 매개변수가 3개인 생성자
		this.color = color; // 인스턴스(객체) 자신을 가리키는 참조변수 this
		this.gearType = gearType;
		this.door = door;
	}
}
class ThisEx {
	public static void main(String[] args) {
		Car c1 = new Car();	
		Car c2 = new Car("blue");

		System.out.println("c1의 color=" + c1.color + ", gearType=" + c1.gearType+ ", door="+c1.door);
		System.out.println("c2의 color=" + c2.color + ", gearType=" + c2.gearType+ ", door="+c2.door);
	}
}

 

 

2. this: 인스턴스(객체) 자신을 가리키는 참조변수

1) 인스턴스 메서드(생성자 포함)에서 사용 가능, static메서드에서 사용 불가

2) 인스턴스변수(iv)와 지역변수(lv)를 구별 할 때 사용

// 인스턴스 변수(iv)와 지역변수(lv)의 이름이 다른 경우, 이름만으로 구별됨
Car(String c, String g, int d) { // 지역변수(lv) c, g, d
    color = c; // this.color = c; 이렇게 써야하는데 같은 클래스 내에서 this는 생략 가능
    gearType = g;
    door = d;
    // 인스턴스 변수(iv) clolor, gearType, door
}


// 인스턴스 변수(iv)와 지역변수(lv)의 이름이 같은 경우, 이름만으로 구별할 수 없음
Car(String color, String gearType, int door) { // 지역변수(lv) color, gearType, door
    this.color = c; // this를 써서 지역변수와 인스턴스 변수를 구별 할 수 있으며, 이름인 같은 경우 this생략 불가
    this.gearType = g;
    this.door = d;
    // 인스턴스 변수(iv) clolor, gearType, door
}