Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

자바(Java) 기본 생성자란? 개념과 동작 원리 쉽게 이해하기

생성자(Constructor)는 메서드와 비슷한 형태를 가지며, 클래스의 객체가 생성되는 시점에 자동으로 호출됩니다. 주로 클래스의 인스턴스 변수를 초기화하는 용도로 사용됩니다. 생성자는 반드시 클래스와 같은 이름을 가져야 하며, 반환 타입을 가지지 않습니다.

자바의 기본 생성자(default constructor)는 클래스의 데이터 멤버들을 각 타입별 기본값으로 초기화합니다. 예를 들어 int형은 0, double형은 0.0으로 초기화됩니다. 사용자가 명시적으로 생성자를 정의하지 않으면, 자바 컴파일러가 자동으로 기본 생성자를 만들어 줍니다.

다음 예제처럼 생성자를 하나도 정의하지 않은 경우를 살펴보겠습니다.

public class Sample {
    int num;
    public static void main(String args[]){
        System.out.println(new Sample().num);
    }
}

위 프로그램을 컴파일하고 실행하면, 컴파일러가 자동으로 추가한 기본 생성자가 정수 변수 num을 0으로 초기화하므로 결과로 0이 출력됩니다.

javap 명령어로 기본 생성자 확인하기

javap 명령어는 클래스의 필드, 생성자, 메서드에 대한 정보를 화면에 표시해 줍니다. 위 클래스를 컴파일한 후 javap 명령어로 실행해 보면, 컴파일러가 자동으로 추가한 기본 생성자를 아래와 같이 확인할 수 있습니다.

D:\>javap Sample
Compiled from "Sample.java"
public class Sample {
    int num;
    public Sample();
    public static void main(java.lang.String[]);
}

예제: 매개변수가 있는 생성자

사용자가 직접 생성자를 하나라도 정의하면, 컴파일러는 더 이상 기본 생성자를 자동으로 추가하지 않습니다. 따라서 필요하다면 매개변수 없는 생성자를 직접 작성해야 합니다. 아래 예제는 기본 생성자와 매개변수가 있는 생성자를 함께 정의한 경우입니다.

public class Sample{
    int num;
    Sample(){
        num = 100;
    }
    Sample(int num){
        this.num = num;
    }
    public static void main(String args[]){
        System.out.println(new Sample().num);
        System.out.println(new Sample(1000).num);
    }
}

실행 결과

100
1000

첫 번째 출력 값인 100은 매개변수 없는 생성자가 num을 100으로 초기화한 결과이고, 두 번째 출력 값인 1000은 매개변수가 있는 생성자에 전달된 값으로 초기화된 결과입니다. 이처럼 여러 생성자를 정의하는 생성자 오버로딩(constructor overloading)을 활용하면, 상황에 맞게 다양한 방식으로 객체를 초기화할 수 있습니다.