객체를 생성할 때 초기화 작업이 필요하다면 생성자를 사용한다.
생성자는 객체 생성 시 특정 작업을 자동으로 처리해준다.
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를 설정해야 한다. 이 반복을 제거하기 위해 생성자를 사용한다.
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를 통해 구분할 수 있다.
생성자는 객체 생성과 동시에 초기화 작업을 수행할 수 있다.
메서드와 비슷하지만, 이름이 클래스와 같고 반환 타입이 없다.
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;
}
}
생성자를 사용하면 객체 생성 시 바로 초기화가 가능하다.
기본 생성자는 매개변수가 없는 생성자이다.
클래스에 생성자가 없으면 자바가 자동으로 기본 생성자를 만들어 준다.
public class Car {
String model;
int year;
int mileage;
// 기본 생성자
public Car() {
this.model = "Unknown";
this.year = 0;
this.mileage = 0;
}
}
생성자를 하나라도 만들면 기본 생성자는 제공되지 않으므로 필요하다면 직접 정의해야 한다.
생성자는 메서드처럼 오버로딩이 가능하다.
여러 개의 생성자를 정의할 수 있으며, 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()를 사용할 때는 생성자의 첫 줄에서 사용해야 한다.
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
this()를 이용해 생성자 내에서 다른 생성자를 호출하여 코드 중복을 줄일 수 있다.