Computer Language/Java

생성자(Constructor)

Hans_S_92 2022. 5. 18. 22:43

* 생성자 함수

- 생성자는 인스턴스가 생성될 때 호출되는 인스턴스 초기화 메서드이다.

- 생성자는 클래스 내 선언, 리턴값이 없다.

- 생성자의 이름은 클래스의 이름과 같아야 한다.

 

class Card() {
	Card() { // 매개변수가 없는 생성자
    ...
    }
    
    Card(String k, int num) { // 매개변수 있는 생성자
    ...
    }
    
    ...
}

 

* Card c = new Card();

- 연산자 new에 의해서 메모리(Heap)에 Card 클래스의 인스턴스가 생성

- 생성자 Card()가 호출되어 수행된다.

- 연산자 new의 결과로 생성된 Card인스턴스의 주소가 반환되어 참조변수 c에 저장

- 컴파일러가 자동적으로 기본 생성자를 추가해주는 경우는 '클래스 내에 생성자가 하나도 없을 때' 뿐이다.

 

* this(), this

- 생성자의 이름으로 클래스이름 대신 this를 사용

- 한 생성자에서 다른 생성자를 호출할 때는 반드시 첫 줄에서만 호출이 가능

 

* 인스턴스 복사

class Car {
	String color;
	String gearType;
	int door;
    
	//일반 생성자
	Car() {
    	//커스텀 생성자 2번을 호출
		this("whith", "auto", 4); 
	}
    
	//커스텀 생성자1
	Car(Car c) {
		color 	 = c.color;
		gearType = c.gearType;
		door = c.door;
	}
    
	//커스텀 생성자2
	Car(String color, String gearType, int door) {
		this.color = color;
		this.gearType = gearType;
		this.door = door;
	}
}

public class CarTest3 {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Car c1 = new Car();
		Car c2 = new Car(c1);
		
		System.out.println("c1 color = " + c1.color + ", gearType = " + c1.gearType + ", door = " + c1.door );
		System.out.println("c2 color = " + c2.color + ", gearType = " + c2.gearType + ", door = " + c2.door );
		
		c1.door = 100;
		
		System.out.println("c1 color = " + c1.color + ", gearType = " + c1.gearType + ", door = " + c1.door );
		System.out.println("c2 color = " + c2.color + ", gearType = " + c2.gearType + ", door = " + c2.door );
	}
}

 - 인스턴스 c2는 c1을 복사하여 생성된 것이므로 서로 같은 상태 갖지만, 서로 독립적으로 메모리공간에 존재하는 별도의 인스턴스이다.