생성자

기본 생성자 (Default Constructor)

기본 생성자는 매개변수가 없는 생성자로, 클래스 내부에 별도로 정의하지 않아도 자바 컴파일러가 자동으로 생성해줍니다.

class Car {
    String name;
    int mileage;
}

위 처럼 정의한 클래스는 기본적으로 아래와 같이 기본 생성자가 있습니다.

class Car {
    String name;
    int mileage;
    
    // 기본 생성자
    Car() {}
}

그래서 우리가 아래처럼 기본생성자를 통해 객체를 생성할 수 있었습니다.

Car myCar = new Car();

매개변수가 있는 생성자

매개변수가 있는 생성자는 객체를 생성할 때 필요한 정보를 전달할 수 있도록 합니다.

대신 이 경우 원래 자동으로 정의된 Car() {} 기본 생성자는 자동으로 만들어지지 않습니다.

class Car {
    String name;
    int mileage;

    // 매개변수가 있는 생성자
    Car(String name, int mileage) {
        this.name = name;
        this.mileage = mileage;
    }
}

💡this

여기서 this.name 는 위에 정의된 멤버변수 String name 를 가리킵니다.

즉, this 키워드는 자기 자신 객체의 주소를 가리키는 포인터라고 생각하시면 됩니다.

생성자에서 매개변수로 받는 name 과 멤버변수 name 이름이 동일하기 때문에, 관례상 왼쪽에는 this.name 로 표기하여 구별한 것입니다.

이 생성자를 사용하여 객체를 초기화하려면 다음과 같이 호출합니다.

Car myCar = new Car("Hyundai", 100);

주 생성자, 부 생성자

위 예시처럼 보통 모든 필드를 매개변수로 받는 생성자를 주 생성자라고 하며,

이 외에 여러 생성자를 정의할 수 있고 이를 부 생성자라고 합니다.

부 생성자는 생성자 오버로딩을 통해 다양한 매개변수 조합을 지원할 수 있습니다.

class Car {
    String name;
    int mileage;

    // 매개변수가 있는 생성자
    Car(String name, int mileage) {
        this.name = name;
        this.mileage = mileage;
    }

    // 부 생성자1
    Car(String name) {
        this.name = name;
        mileage = 100;
    }
}

이렇게 부 생성자를 정의하면, 객체를 다양한 방법으로 초기화할 수 있습니다.

Car car1 = new Car("Hyundai", 100);  // 매개변수가 있는 생성자 호출
Car car2 = new Car("Hyundai");       // 부생성자 호출

부 생성자를 사용하여 클래스의 객체를 초기화하려면, 생성자의 매개변수에 전달할 값을 조절하면 됩니다. 이렇게 하면 클래스의 유연성과 재사용성을 향상시킬 수 있습니다.

부생성자는 아래와 같이 주생성자를 이용해서 정의하는 방법이 있습니다.

코드의 일관성을 확보하고, 중복을 방지할 수 있을 확률이 높아 이 방법을 더 권장합니다.

class Car {
    String name;
    int mileage;

    // 매개변수가 있는 생성자
    Car(String name, int mileage) {
        this.name = name;
        this.mileage = mileage;
    }

    // 부 생성자2
    Car(String name) {
        this(name, 100);
    }
}

여기서 this() 는 위에 있는 생성자Car(String name, int mileage)를 호출합니다.

Last updated