객체가 생성될 때 호출되며 객체를 초기화하는 역할을 수행함
public Car(){} // 선언
...
Car car = new Car(); // 호출
Car();
생성자가 호출됨선언할 때 괄호()
안에 아무것도 넣지 않은 생성자를 의미함
public class Car {
// 생성자 선언
public Car(String model){}
//생성자가 한개 이상 선언되었기 때문에 기본 생성자를 추가하지 않음
}
public class Car {
// 컴파일러가 추가시켜줌
public Car(){}
}
class Car {
// 컴파일러가 추가시켜줌
car(){}
}
생성자는 객체를 초기화하는 역할을 수행함
- 객체를 만들 때 인스턴스마다 다른 값을 가져야 한다면 생성자를 통해서 필드를 초기화할 수 있음
: 예를 들어 만들어지는 자동차 마다 모델, 색상, 가격이 다르다면 생성자를 사용하여 필드의 값을 초기화하는 것이 좋음- 반대로 인스턴스 마다 동일한 데이터를 가지는 필드는 초기값을 대입하는 것이 좋음
: 예를 들어 자동차가 만들어질 때마다 기어의 상태를 'P'로 고정해야 한다면 초기값을 직접 대입하는 것이 좋음
🚨 여기서 잠깐! 주의할 점!
- 생성자를 통해 필드값을 초기화하고 기본 생성자를 작성하지 않았는데 기본 생성자를 호출한다면?
public Car (String modelName, String colorName, double priceValue){ model = modelName; color = colorName; price = priceValue; } ... // 오류 발생 Car car = new Car();
-한개 이상의 생성자가 존재하기 때문에 컴파일러가 자동으로 기본 생성자를 추가해주지 않기 때문에 기본 생성자가 존재하지 않아 오류가 발생함
: 똑같은 메서드 이름이지만 매개변수의 종류와 타입에 따라 완전히 다른 역할을 하게 하는 것
: (= 메서드의 이름을 낭비하지 않도록 하는 것)
🚨 여기서 잠깐! 주의할 점!
오버로딩 : 똑같은 메서드 이름이지만 매개변수의 종류와 타입에 따라 완전히 다른 역할을 하게 하는 것 (= 메서드의 이름을 낭비하지 않도록 하는 것)
public Car(String modelName, String colorName, double priceValue) public Car(String colorName, String modelName, double priceValue)
- modelName과 colorName 매개변수의 위치가 다르기 떄문에 가능할 것 처럼 보이지만
String, String, double
: 매개변수의 개수, 타입, 순서가 동일하기 때문에 중복이 불가능
Car.java
Main.java
: Java에서는 인스턴스 자기 자신을 표현하는 키워드
public Car(String model, String color, double price){
model = model;
color = color;
price = price;
}
this
키워드로 해결 가능public Car(String model, String color, double price){
this.model = model;
this.color = color;
this.price = price;
}
this
키워드를 통해 변수명에 해당하는 객체의 필드에 접근하여 받아온 매개변수의 매개값을 객체의 필드에 대입하여 저장할 수 있음Car returnInstance(){
return this;
}
this
는 인스턴스 자신을 뜻하기 때문에 객체의 메서드에서 리턴타입이 인스턴스 자신의 클래스 타입이라면 this
를 사용하여 인스턴스 자신의 주소를 반환할 수도 있음: 인스턴스 자신의 생성자를 호출하는 키워드
< 매개변수 1개 >
public Car(String model){
this.model = model;
this.color = "Blue";
this.price = 50000000;
}
< 매개변수 2개 >
public Car(String model, String color){
this.model = model;
this.color = "Blue";
this.price = 50000000;
}
< 매개변수 3개 >
public Car(String model, String color, double price){
this.model = model;
this.color = "Blue";
this.price = 50000000;
}
this()
키워드를 통해 코드의 중복을 제거할 수 있음public Car(String model){
this(model, "Blue", 50000000);
}
public Car(String model, String color){
this(model, color, 100000000);
}
public Car(String model, String color, double price){
this.model = model;
this.color = color;
this.price = price;
}
🚨 여기서 잠깐! 주의할 점!
this()
키워드를 사용해서 다른 생성자를 호출할 때는 반드시 해당 생성자의 첫 줄에 작성되어야 함public Car(String model){ System.out.println("model = " + model); this(model, "Blue", 50000000) }
- 이처럼
this()
키워드로 다른 생성자 호출 이전에 코드가 존재하면 오류가 발생함