생성자는 객체가 생성될 때 호출되며 객체를 초기화하는 역할을 수행한다.
public Car() {} // 선언
...
Car car = new Car(); // 호출
기본 생성자는 선언할 때 괄호( ) 안에 아무것도 넣지않는 생성자를 의미한다.
public class Car {
public Car(String model) {} // 생성자 선언
// 생성자가 한 개 이상 선언되었기 때문에 기본 생성자를 추가하지 않음.
}
public class Car {
public Car() {} // 컴파일러가 추가시켜주었다.
}
class Car {
Car() {} // 컴파일러가 추가시켜주었다.
}
생성자는 객체를 초기화하는 역할을 수행한다.
객체를 만들때 인스턴스마다 다른 값을 가져야 한다면 생성자를 통해서 필드를 초기화 할 수 있다.
ex) 자동차마다 모델, 색상, 가격이 다르다면 생성자를 생성하여 필드값을 초기화 시키는게 낫다.
반대로 인스턴스마다 동일한 데이터를 가지는 필드는 초기값을 대입하는 것이 좋다.
ex) 자동차가 만들어질 때마다 기어의 상태를 'P'로 고정해야 한다면 초기값을 직접 대입하는 것이 낫다.
단, 주의할 점!
public Car(String modelName, String colorName, double priceValue) {
model = modelName;
color = colorName;
price = priceValue;
}
...
Car car = new Car(); // 오류 발생
생성자에서 다른 생성자 호출할 때 사용한다.
생성자의 첫 줄에서만 사용 가능하다.
코드의 중복을 제거할 수 있다.
class Car2 {
String color; // 색상
String gearType; // 변속기 종류 - auto(자동), manual(수동)
int door; // 문의 갯수
//<1>
Car2() {
this("white", "auto", 4);
}
//<2>
Car2(String color) {
this(color, "auto", 4);
}
//<3>
Car2(String color, String gearType, int door) {
this.color = color;
this.gearType = gearType;
this.door = door;
}
}
<1>과 <2> 메서드는 <3> Car2(String color, String gearType, int door) 를 호출