생성자는 간단하게 얘기하면 인스턴스가 생성될 때 호출되는 '인스턴스 초기화 메소드'이다. 인스턴스 변수의 초기화 작업에 사용되고, 인스턴스 생성 시에 실행되어야 할 작업을 위해서 사용된다.
컴파일을 할 때, 소스파일의 클래스에 생성자가 하나도 정의되어있지 않으면 컴파일러가 자동으로 기본 생성자를 생성해서 컴파일해준다. (아래 예제 참고)
class Data1 {
int value;
}
class Data2 {
int value;
Data2(int x) { // 매개변수가 있는 생성자.
value = x;
}
}
class ConstructorTest {
public static void main(String[] args) {
Data1 d1 = new Data1();
Data2 d2 = new Data2(); //에러가 발생한다.
}
}
위에 코드를 실행해보면 Data2 d2 = new Data2()
부분에서 에러가 발생하는데 이유는 Data2()는 기본 생성자가 아닌 매개변수가 있는 생성자이기 때문이다.
위 에러가 발생했던 Data2()처럼, 인스턴스를 생성할 때 매개변수가 있는 생성자를 사용한다면 인스턴스를 생성함과 동시에 원하는 값으로 초기화를 할 수 있어 보다 간결하고 직관적이다. (아래 예제 참고)
class Car {
String color;
String gearType;
int door;
Car() {} // 기본 생성자 (직접 생성자를 만들지 않더라도 자동으로 기본 생성자 추가)
Car(String c, String g, int d) { // 매개변수가 있는 생성자
color = c;
gearType = g;
door = d;
}
}
class CarTest {
public static void main(String[] args) {
Car c1 = new Car(); // Car c1은 기본 생성자에서 값을 초기화해주는 과정이 있다.
c1.color = "white";
c1.gearType = "auto";
c1.door = 4;
Car c2 = new Car("white", "auto", 4);
}
}