728x90

생성자 this()

생성자에서 다른 생성자 호출할 때 사용

코드 중복을 제거할려고 this() 사용

 

원래 코드는 Car(color, “auto”, 4)로 호출해야함

this()생성자를  사용하므로써 이렇게 this(color, “auto”, 4) 

 

 

코드의 중복

Car() { // Car()의미는 () 안에 매개변수를 아무 값도 지정하지 않았으면 
        // 디폴트 값으로 아래의 세가지를 넣으라는 것
	color = "white";
	gearType = "auto";
	door = 4;
}

 

이미지 왼쪽의 중복된 코드(변경 전)

class Car{
	String color;
	String gearType;
	int door;
//////////////////////////////////////////////////////////
			Car() {                         // 1번 Car()
				color = "white";
				gearType = "auto";
				door = 4;
			}
			
			Car(String c, String g, int d){ // 2번 Car()
				color = c;
				gearType = g;
				door = d;
			}
}        // 1번 Car()와 2번 Car()가 같은 코드로 중복(bad)

 

이미지 오른쪽에 코드의 중복을 제거한 코드(변경 후)

class Car{
	String color;
	String gearType;
	int door;
//////////////////////////////////////////////////////////
		Car() {
			// Car("white","auto",4);
			this("white","auto",4);   // 바로 Car생성자의 매개변수로 값 대입
		}  // 중복 제거(good)
		
		Car(String c, String g, int d){
			color = c;
			gearType = g;
			door = d;
		}
}

 


 

참조변수 this.

인스턴스 자신을 가리키는 참조변수(reference variable)

 

특징

인스턴스 메서드(생성자 포함)에서만 사용 가능

    - 클래스 메소드(static 메소드)에서 사용 불가

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

인스턴스의 주소가 저장되어있다

모든 인스턴스 메서드에 지역변수로 숨겨진 채로 존재한다(생략 가능)         

    - 전역변수와 지역변수 구분을 위해 쓰는 경우는 생략하면 에러는 아니나 지역변수 = 지역변수;가 되버려서 의미x

    - this를 선언안해도 사용가능. 선언한 적 없는데 사용할 수 있는 변수

 

ex)

long a ,b;

참조변수 long a ,b의 진짜 이름은 this.a, this.b

long add() {
	return a + b; // return this.a + this.b;

 

 

728x90
반응형

+ Recent posts