객체가 생성될 때 호출되며 객체를 초기화하는 역할을 수행
반환 타입이 없고 이름은 클래스의 이름과 동일
public Car() {}
Car car = new Car();
new 연산자에 의해 객체 생성
생성자 호출
선언할 때 괄호()
안에 아무것도 넣지 않는 생성자
모든 클래스는 반드시 생성자가 하나 이상 존재
컴파일러가 기본 생성자를 바이트코드 파일에 자동으로 추가 시켜줬다면 생략 가능
생성자가 단 하나라도 선언되어있다면 컴파일러는 기본 생성자를 추가하지 않음
public class Car { public Car(String model) {} // 생성자 선언 }
public class Car { public Car() {} // 컴파일러가 추가시켜줌 } class Car { Car() {} // 컴파일러가 추가시켜줌 }
객체를 만들 때 인스턴스마다 다른 값을 가져야 한다면 생성자를 통해서 필드 초기화 가능
ex)
인스턴스마다 동일한 데이터를 가지는 필드는 초기값을 대입하는 것이 좋음
ex)
‼️ 주의 !!
public Car(String modelName, String colorName, double priceValue) { model = modelName; color = colorName; price = priceValue; } ... Car car = new Car(); // 오류 발생
1개 이상의 생성자가 존재하기 때문에 컴파일러가 자동으로 기본 생성자를 추가해주지 않음
기본 생성자가 존재하지 않으므로 Error 발생
생성자를 통해 필드를 초기화 할 때 적용 가능
ex)
‼️ 주의 !!
public Car(String modelName, String colorName, double priceValue) public Car(String colorName, String modelName, double priceValue)
String, String, double
: 매개변수의 개수, 타입, 순서가 동일하기 때문에 중복이 불가능char gear = 'P'; // (1) constructor : 오버로딩(똑같은 매개변수르 사용하면서 매개 변수에 따라 완벽하게 다른 기능을 수행) public Car(String modelName) { model = modelName; System.out.println("첫 번째 생성자가 호출되었습니다."); } // (2) public Car(String modelName, String colorName) { model = modelName; color = colorName; System.out.println("두 번째 생성자가 호출되었습니다."); } // (3) public Car(String modelName, String colorName, double priceValue) { model = modelName; color = colorName; price = priceValue; System.out.println("세 번째 생성자가 호출되었습니다."); }
package week03.constructor; public class Main { public static void main(String[] args) { // 기본 생성자 호출 오류 확인 // Car car1 = new Car(); // 오류 발생 // 생성자 오버로딩을 통해 여러 상황에서 자동차 생산 // 제네시스 자동차를 생산 : static final String COMPANY = "GENESIS"; 상수 고정 // 모든 자동차는 생산시 기어의 최초 상태 'P' 로 고정 : char gear = 'P'; 직접 대입하여 초기화 // GV60 모델만 기본으로 선택 Car car2 = new Car("GV60"); System.out.println("car2.model = " + car2.model); System.out.println("car2.gear = " + car2.gear + "\n"); // GV70 모델, 색상 Blue 만 기본으로 선택 Car car3 = new Car("GV70", "Blue"); System.out.println("car3.model = " + car3.model); System.out.println("car3.color = " + car3.color); System.out.println("car3.gear = " + car3.gear + "\n"); // GV80 모델, 색상 Black, 가격 50000000 으로 완전하게 고정된 경우 Car car4 = new Car("GV80", "Black", 50000000); // 문자 문자 double형 System.out.println("car4.model = " + car4.model); System.out.println("car4.color = " + car4.color); System.out.println("car4.price = " + car4.price); System.out.println("car4.gear = " + car4.gear + "\n"); } }
첫 번째 생성자 : car2 => String modelName을 받기 때문에
두 번째 생성자 : car3 => String modelName, String colorName을 받기 때문에
세 번째 생성자 : car4 => String modelName, String colorName, double priceValue을 받기 때문에
gear는 모두 'P'로 고정이 되고 modelName, color, price만 지정해준 값으로 변경됨