생성자란?: 인스턴스 초기화 메서드이다. 따라서 인스턴스 변수의 초기화 작업에 주로 사용된다.
생성자의 조건
주의할 점
Card c = new card();
class Car{
String color;
String gearType;
Car() {} // 생성자
Car(String c, String g, int d){ // 매개변수가 있는 생성자
color c;
gearType = g;
door = d;
}
}
→ 첫 줄에서만 호출이 가능하도록 한 이유는 생성자 내에서 초기화 작업도중에 다른 생성자를 호출하게 되면, 호출된 다른 생성자 내에서도 멤버변수들의 값을 초기화를 할 것이므로 다른 생성자를 호출하기 이전의 초기화 작업이 무의미
this() 호출하기
Car(String color, String gearType, int door){
this.color = color;
this.gearType = gearType;
this.door = door;
}
Car(){
this("white","auto",4);
}
this함수는 생성자간의 호출 시에는 생성자의 이름 대신 this를 사용한다.
this호출
Car(String color, String gearType, int door){
this.color = color;
this.gearType = gearType;
this.door = door;
}
생성자의 매개변수로 선언된 변수의 이름이 color로 인스턴스 변수 color와 같을 경우에는
이름만으로 두 변수가 서로 구별이 안 된다. 이런 경우에는 this키워드를 사용하면 된다.
this를 사용할 수 있는 것은 인스턴스 멤버뿐이다. static메서드에서는 인스턴스 멤버들을 사용할 수 없는 것처럼 this 역시 사용할 수 없다. 왜냐하면, static메서드는 인스턴스를 생서하지 않고도 호출될 수 있으므로 static 메서드가 호출된 시점에 인스턴스가 존재하지 않을 수도 있기 때문이다.
class Car{
String color;
String gearType;
int door;
Car(){
this("white", "auto", 4);
}
Car(String color, String gearType, int door){
this.color = color;
this.gearType = gearType;
this.door = door;
}
Car(Car c){
color = c.color;
gearType = c.gearType;
door = c.door;
}
Car c1 = new Car();
Car c2 = new Car(c1); //c1의 복사본 c2를 생성한다.
}