기본 생성자(default constructor)
모든 클래스에는 반드시 하나 이상의 생성자가 정의되어 있어야 한다. 그러나 지금까지 클래스에 생성자를 정의하지 않고도 인스턴스를 생성할 수 있었던 이유는 컴파일러가 제공하는 기본 생성자 덕분이다.
컴파일 시 소스파일(*. java)의 클래스에 생성자가 하나도 정의되지 않은 경우 컴파일러는 자동적으로 아래와 같은 내용의 기본 생성자를 추가하여 컴파일한다.
클래스이름() {} // 기본 생성자
Point() {} // Point클래스의 기본 생성자
그동안 인스턴스를 생성할 때 컴파일러가 제공한 기본 생성자를 사용했으며 특별히 인스턴스 초기화 작업이 요구되지 않는다면 생성자를 정의하지 않고 컴파일러가 제공하는 기본 생성자를 사용하는 것도 좋다.
클래스의 접근 제어자가 public인 경우에는 기본 생성자로 public 클래스이름() {}이 추가된다.
class Data_1 {
int value;
}
class Data_2 {
int value;
Data_2(int x) { // 매개변수가 있는 생성자
value = x;
}
}
class contructorExam {
public static void main(String[] args) {
Data_1 d1 = new Data_1();
Data_2 d2 = new Data_2(); // complie error
}
}
Data_2 클래스에 생성자 Data_2()가 정의되어 있지 않기 때문에 에러가 발생한 것이다.
Data_1은 정의되어 있는 생성자가 하나도 없으므로 컴파일러가 기본 생성자를 추가했지만 Data_2는 이미 Data_2(int x)가 정의되어 있으므로 기본 생성자가 추가되지 않아서 에러가 발생했다.
컴파일러가 자동으로 기본 생성자를 추가해주는 경우는 클래스 내에 생성자가 하나도 없을 때뿐이다.
Data_1 d1 = new Data_1();
Data_2 d2 = new Data_2(10);
위와 같이 Data_2 클래스의 인스턴스를 생성할 때 생성자 Data_2(int x)를 사용하던가 Data_2 클래스에 생성자 Data_2()를 추가로 정의해주면 된다.
'Java의 정석' 카테고리의 다른 글
객체 지향 개념 - 14 this() (0) | 2022.03.18 |
---|---|
객체 지향 개념 - 13 매개변수가 있는 생성자 (0) | 2022.03.17 |
객체 지향 개념 - 11 생성자(constructor) (0) | 2022.03.15 |
객체 지향 개념 - 10 오버로딩(overloading) (0) | 2022.03.14 |
객체 지향 개념 - 9 메서드 간의 호출과 참조 (0) | 2022.03.11 |