본문 바로가기

Java의 정석

객체 지향 개념 - 12 기본 생성자(default constructor)

기본 생성자(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()를 추가로 정의해주면 된다.