생성자

상곤·2024년 9월 29일

Java

목록 보기
6/22
post-thumbnail

1. 생성자가 필요한 이유

객체를 생성할 때 초기화 작업이 필요하다면 생성자를 사용한다.
생성자는 객체 생성 시 특정 작업을 자동으로 처리해준다.

public class Car {
    String model;
    int year;
    int mileage;
}
public class Main {

public static void main(String[] args) {
        Car car1 = new Car();
        car1.model = "Sedan";
        car1.year = 2022;
        car1.mileage = 15000;

        Car car2 = new Car();
        car2.model = "SUV";
        car2.year = 2021;
        car2.mileage = 20000;
    }
}

객체를 생성할 때마다 model, year, mileage를 설정해야 한다. 이 반복을 제거하기 위해 생성자를 사용한다.


2. this 키워드

this는 인스턴스 자신을 참조하는 키워드이다.
멤버 변수와 매개변수의 이름이 같을 때 구분하기 위해 사용된다.

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

    void setCar(String model, int year, int mileage) {
        this.model = model;
        this.year = year;
        this.mileage = mileage;
    }
}

this.model은 멤버 변수를 의미하고, model은 매개변수를 의미한다.
이렇게 this를 통해 구분할 수 있다.


3. 생성자 도입

생성자는 객체 생성과 동시에 초기화 작업을 수행할 수 있다.
메서드와 비슷하지만, 이름이 클래스와 같고 반환 타입이 없다.

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

    // 생성자
    Car(String model, int year, int mileage) {
        this.model = model;
        this.year = year;
        this.mileage = mileage;
    }
}

생성자를 사용하면 객체 생성 시 바로 초기화가 가능하다.


4. 기본 생성자

기본 생성자는 매개변수가 없는 생성자이다.
클래스에 생성자가 없으면 자바가 자동으로 기본 생성자를 만들어 준다.

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

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

생성자를 하나라도 만들면 기본 생성자는 제공되지 않으므로 필요하다면 직접 정의해야 한다.


5. 생성자 오버로딩과 this()

생성자는 메서드처럼 오버로딩이 가능하다.
여러 개의 생성자를 정의할 수 있으며, this()를 사용해 생성자 내부에서 다른 생성자를 호출할 수 있다.

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

    // 생성자 오버로딩
    Car(String model, int year) {
        this(model, year, 0);  // this()로 다른 생성자 호출
    }

    Car(String model, int year, int mileage) {
        this.model = model;
        this.year = year;
        this.mileage = mileage;
    }
}

this()를 사용해 중복된 코드를 줄이고, 하나의 생성자에서 다른 생성자를 호출할 수 있다.
주의할 점은 this()를 사용할 때는 생성자의 첫 줄에서 사용해야 한다.


6. 예시

public class Car {
    String model;  // 차종
    String color;  // 색상
    int year;  // 연식
    int mileage;  // 주행거리

    // 기본 생성자: 빈 값으로 초기화
    Car() {
        this("Unknown", "Unknown", 0, 0);
    }

    // 생성자 오버로딩: 모델과 연식만 받는 생성자
    Car(String model, int year) {
        this(model, "Unknown", year, 0);
    }

    // 모든 필드를 매개변수로 받는 생성자
    Car(String model, String color, int year, int mileage) {
        this.model = model;
        this.color = color;
        this.year = year;
        this.mileage = mileage;
    }

    // 정보 출력 메서드
    public void displayInfo() {
        System.out.println("모델: " + model + ", 색상: " + color + ", 연식: " + year + ", 주행거리: " + mileage);
    }
}

CarMain 클래스에서 생성자를 활용한 다양한 초기화를 보여준다.

public class CarMain {

    public static void main(String[] args) {

        // 기본 생성자 사용
        Car car1 = new Car();
        car1.displayInfo();

        // 모델과 연식만 받는 생성자 사용
        Car car2 = new Car("Sedan", 2022);
        car2.displayInfo();

        // 모든 필드를 매개변수로 받는 생성자 사용
        Car car3 = new Car("SUV", "Black", 2021, 15000);
        car3.displayInfo();
    }
}

실행 결과

모델: Unknown, 색상: Unknown, 연식: 0, 주행거리: 0
모델: Sedan, 색상: Unknown, 연식: 2022, 주행거리: 0
모델: SUV, 색상: Black, 연식: 2021, 주행거리: 15000

7. 정리

  • 생성자는 객체 생성 시 초기화를 위한 메서드이다.
  • this는 인스턴스 자신을 가리킨다.
  • 생성자는 반환 타입이 없으며, 클래스 이름과 동일하다.
  • 기본 생성자는 매개변수가 없는 생성자로, 클래스에 생성자가 없으면 자동으로 제공된다.
  • this()를 이용해 생성자 내에서 다른 생성자를 호출하여 코드 중복을 줄일 수 있다.
profile
🫠

0개의 댓글