본문 바로가기

언어 기초/JAVA

생성자 [JAVA | 학습을 위한 자료| 김영한 자바 기본]

자바의 생성자는 클래스의 인스턴스가 생성될 때 호출되어 객체를 초기화하는 특수한 메서드이다. 생성자는 클래스와 동일한 이름을 가지며, 반환 타입이 없다. 생성자의 주요 역할은 객체의 초기 상태를 설정하는 것이다. 생성자는 다음과 같은 특징을 가진다:

생성자의 특징

  1. 이름이 클래스 이름과 동일: 생성자는 클래스 이름과 동일한 이름을 가지며, 반환 타입을 명시하지 않는다.
  2. 반환 타입이 없음: 생성자는 반환 타입이 없으며, 반환 타입을 명시하지 않는다.
  3. 자동 호출: 객체가 생성될 때 자동으로 호출된다.
  4. 오버로딩 가능: 생성자도 메서드처럼 오버로딩할 수 있다. 즉, 동일한 이름의 생성자를 여러 개 정의할 수 있으며, 각 생성자는 서로 다른 매개변수 목록을 가질 수 있다.
  5. 기본 생성자 제공: 클래스에 생성자가 하나도 정의되지 않은 경우, 자바 컴파일러는 매개변수가 없는 기본 생성자를 자동으로 제공한다. 그러나 매개변수가 있는 생성자를 하나라도 정의하면 기본 생성자는 자동으로 제공되지 않으므로 필요하면 명시적으로 정의해야 한다.

생성자의 역할

  • 객체 초기화: 생성자는 객체의 필드를 초기화하는 데 사용된다. 객체 생성 시 초기화해야 하는 값을 생성자의 매개변수로 받아 필드를 설정할 수 있다.
  • 의존성 주입: 생성자를 통해 객체가 의존하는 다른 객체나 값을 주입할 수 있다.

 

생성자 정의

생성자는 클래스의 이름과 동일해야 하며, 반환 타입을 명시하지 않는다. 생성자는 매개변수를 가질 수 있으며, 오버로딩할 수 있다.

생성자 호출

생성자는 new 키워드를 사용하여 클래스의 인스턴스를 생성할 때 호출된다. 호출 시 생성자의 매개변수에 맞는 값을 전달해야 한다.

기본 생성자

기본 생성자는 매개변수가 없는 생성자이다. 기본 생성자는 클래스에 생성자가 하나도 정의되지 않았을 때 자동으로 제공된다.

public class Car {
    private String model;
    private int year;

    // 기본 생성자
    public Car() {
        this.model = "Unknown";
        this.year = 0;
    }

    // 메서드
    public void displayInfo() {
        System.out.println("Model: " + model + ", Year: " + year);
    }

    public static void main(String[] args) {
        Car myCar = new Car();  // 기본 생성자 호출
        myCar.displayInfo();    // 출력: Model: Unknown, Year: 0
    }
}

매개변수가 있는 생성자

매개변수가 있는 생성자는 객체를 생성할 때 필요한 초기 값을 전달받아 필드를 초기화한다.

public class Car {
    private String model;
    private int year;

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

    // 메서드
    public void displayInfo() {
        System.out.println("Model: " + model + ", Year: " + year);
    }

    public static void main(String[] args) {
        Car myCar = new Car("Toyota", 2022);  // 매개변수가 있는 생성자 호출
        myCar.displayInfo();  // 출력: Model: Toyota, Year: 2022
    }
}

생성자 오버로딩

생성자 오버로딩은 같은 이름을 가진 여러 생성자를 정의하는 것이다. 각 생성자는 서로 다른 매개변수를 가질 수 있다.

public class Car {
    private String model;
    private int year;

    // 기본 생성자
    public Car() {
        this.model = "Unknown";
        this.year = 0;
    }

    // 매개변수가 있는 생성자
    public Car(String model) {
        this.model = model;
        this.year = 0;
    }

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

    // 메서드
    public void displayInfo() {
        System.out.println("Model: " + model + ", Year: " + year);
    }

    public static void main(String[] args) {
        Car car1 = new Car();  // 기본 생성자 호출
        Car car2 = new Car("Honda");  // 모델만 지정하는 생성자 호출
        Car car3 = new Car("Ford", 2020);  // 모델과 연도를 지정하는 생성자 호출

        car1.displayInfo();  // 출력: Model: Unknown, Year: 0
        car2.displayInfo();  // 출력: Model: Honda, Year: 0
        car3.displayInfo();  // 출력: Model: Ford, Year: 2020
    }
}

요약

  • 생성자는 클래스의 이름과 동일하며 반환 타입이 없다.
  • 객체가 생성될 때 자동으로 호출되어 객체의 초기 상태를 설정한다.
  • 생성자는 매개변수를 가질 수 있으며, 생성자 오버로딩을 통해 여러 생성자를 정의할 수 있다.
  • 기본 생성자는 명시적으로 정의되지 않은 경우 자바 컴파일러가 자동으로 제공하지만, 매개변수가 있는 생성자가 정의된 경우에는 제공되지 않으므로 명시적으로 정의해야 한다.

이러한 생성자의 특징과 역할을 이해하면 객체 지향 프로그래밍에서 객체의 초기화와 의존성 관리를 효과적으로 할 수 있다.