본문 바로가기
Java

자바 - 기본 생성자

by 청원뿔세포 2022. 5. 17.

참고자료 : http://www.tcpschool.com/java/java_methodConstructor_constructor

자바의 모든 클래스는 하나 이상의 생성자가 정의되어 있어야 한다.

하지만 생성자를 정의하지 않아도 인스턴스를 생성할 수 있다.

자바 컴파일러가 기본 생성자를 자동으로 만들어주는 기능이 있기 때문이다.

기본 생성자는 매개변수를 하나도 가지지 않으며, 아무런 명령어도 포함하고 있지 않다.

 

class Car{
	private String carName = "Modle X";
	
	
	public String carCrash() {
		return this.carName;
	}
}

public class main {

	public static void main(String[] args) {
		Car whatCar = new Car();	// Car의 인스턴스 : whatCar
		System.out.println(whatCar.carCrash());

	}

}
// 결과
Model X

Car클래스의 인스턴스인 whatCar는 기본 생성자를 사용하여 생성된다.

기본 생성자는 인스턴스 변수를 클래스 필드에서 바로 초기화하고 있다.

 

인스턴스 변수의 초기화는 생성자를 사용하여 수행할 수도 있지만, 클래스 필드에서 바로 수행할 수 도 있다.

 

하지만 매개변수를 가지는 생성자를 하나라도 정의했다면, 기본 생성자는 자동으로 만들어지지 않는다.

따라서 매개변수를 가지는 생성자를 하나 이상 정의한 후 기본 생성자를 호출하면, 오류가 발생한다.

class Car{
	private int carCost;
	private String carName;
	private String carMaker;
	
	// 생성자 추가
	Car(int carCost, String carName, String carMaker){
		this.carCost = carCost;
		this.carName = carName;
		this.carMaker = carMaker;
	}
		
	public String carCrash() {
		return this.carName;
	}
}

public class main {

	public static void main(String[] args) {
    	
        // 기본 생성자의 호출 -> 오류를 발생시킨다
		Car whatCar1 = new Car();
        
        // 미리 만들어둔 생성자의 호출 -> 정상작동
		Car whatCar2 = new Car(83000,"Model X", "Tesla");
		System.out.println(whatCar.carCrash());
	}
}

코드 윗부분 생성자 추가 부분에서 매개변수 3개를 갖는 생성자를 정의해주었다.

따라서 자바 컴파일러는 Car클래스에 별도의 기본 생성자를 추가하지 않을 것이다.

 

코드 아랫부분에서 기본생성자를 new로 호출하여 인스턴스 whatCar를 생성하는 부분이 있다.

하지만 자바 컴파일러는 만들어둔 생성자가 이미 있어서 기본 생성자를 만들지 않기 때문에 해당 줄에서 오류를 발생시킨다. 

미리 만들어둔 생성자를 매개변수에 대입할 적절한 값과 함께 호출해주면 오류없이 작동한다.

'Java' 카테고리의 다른 글

상속  (0) 2022.10.19
자바 - 오버로딩 vs 오버라이딩  (0) 2022.06.10
자바 - 기타 제어자  (0) 2022.05.25
자바 - 메소드 오버로딩  (0) 2022.05.24
자바 - 클래스 기본 예제 (1)  (0) 2022.04.01

댓글