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