본문 바로가기

Java

Java 생성자(constructor)

1. 생성자(constructor): 인스턴스가 생성될 때 호출되는 인스턴스 변수 초기화 메서드

  1) 클래스 내에 선언 됨

  2) 메서드와 유사한 구조이지만 리턴값이 없음

    (생성자도 메서드이기 때문에 void를 붙여야 하지만 모든 생성자가 리턴값이 없으므로 void를 생략할 수 있게 한 것)

  3) 생성자명은 클래스명과 같아야 함

class Card { // 클래스명과 생성자명은 같아야 함
	...
    Card() { // 매개변수 없는 생성자
    	// 인스턴스 초기화 작업
    }
    
    Card(String kind, int number) { // 매개변수 있는 생성자
    	// 인스턴스 초기화 작업
    }
}

 

 

2. 기본 생성자(default constructor): 매개변수가 없는 생성자로, 클래스 내에 생성자가 존재하지 않을 경우 컴파일러가 자동 추가해줌

class Data_1 { // 클래스 내에 생성자가 존재하지 않기 때문에 컴파일러가 자동으로 기본 생성자인 Data_1(){}을 추가하여 컴파일
	int value;
}

class Data_2 { // 클래스 내에 매개변수가 있는 생성자가 존재하기 때문에 기본 생성자를 추가해야 에러가 발생하지 않음
	int value;

	Data_2(int x) {   // 매개변수가 있는 생성자
		value = x;
	}
}

class Ex6_11 {
	public static void main(String[] args) {
		Data_1 d1 = new Data_1();
		Data_2 d2 = new Data_2(); // compile error: cannot resolve symbol symbol : constructor Data_2()...
	}
}

 

 

3. 매개변수가 있는 생성자: 인스턴스마다 각각 다른 값으로 초기화되어야 하는 경우 매개변수를 선언하여 호출 시 값을 넘겨받아 인스턴스 초기화 작업에 사용

class Car {

    // 인스턴스 변수 선언	
    String color;
    String gearType;
    int door;
    
    // 기본 생성자
    Car() {
    {
    
    // 매개변수가 있는 생성자
    Car(String c, String g, int d) {
    	color = c;
        gearType = g;
        door = d;
    }
}

class Car2{
	public static void main(String[] args) {
    	Car c = new Car("white", "auto", 4);
    }
}

 

 

4. 생성자 간 호출