1. 생성자란?
- new연산자로 클래스로부터 객체를 생성할 때 호출되어 객체의 초기화 담당
- 객체 초기화 : 필드를 초기화하거나 메소드를 호출해서 객체를 사용할 준비를 하는 것
- new연산자에 의해 생성자가 실행되면 힙 영역에 객체가 생성되고 객체의 번지가 리턴됨
- 모든 클래스는 생성자가 반드시 존재
- 생성자를 하나 이상 가질 수 있음
2. 기본 생성자(default constructor)
클래스이름() {}
- 생성자가 하나도 없을 때만, 컴파일러가 기본 생성자 자동 추가
- 생성자 선언을 생략하면 컴파일러는 기본 생성자를 바이트 코드에 추가
- 명시적 선언한 생성자가 1개라도 있으면 컴파일러는 기본 생성자를 추가하지 않음
3. 매개변수가 있는 생성자
- 생성자는 메소드와 미슷한 모양을 가지고, 리턴 타입이 없고, 클래스 이름과 동일
클래스 ( 매개변수선언, ... ) {
}
public class Car {
String model;
String color;
int maxSpeed;
Car(String m, String c, int s) {
model = m;
color = c;
maxSpeed = s;
}
}
Car car = new Car("그랜저", "검정", 300);
※ 기본 생성자는 컴파일러에 의존하지 말고 항상 만들어 주는 습관 필요
3.1. 생성자 오버로딩
- JAVA에서 다양한 방법으로 객체를 생성할 수 있는 생성자 오버로딩 제공
- 매개 변수 달리하는 생성자를 여러개 선언
public class Car{
Car() {...}
Car(String m) {...}
Car(String m, String c) {...}
Car(String m, String c, int m) {...}
}
4. 생성자에서 다른 생성자 호출하기 - this(), this
4.1. this() : 다른 생성자 호출(생성자)
- 객체 자신의 또 다른 생성자를 호출할 때 사용
- this()는 반드시 생성자의 첫 줄에서만 허용
Car(String m) {
this.model = m;
this.color = 은색:
this.masSpeed = 100;
}
Car(String m, String c) {
this.model = m;
this.color = c;
this.masSpeed = 100;
}
...
Car(String m) {
this(m, "은색", 100);
}
Car(String m, String c) {
this(m, c, 100);
}
Car(String m, String c, int s) {
model = m;
color = c;
maxSpeed = s;
}
4.2. this : 참조변수
- 인스턴스 자신을 가리키는 참조변수
- 인스턴스의 주소가 저장
- 인스턴스 메서드, 생성자에서 사용 가능
- 지역변수와 인스턴스 변수 구별할 때 사용
Car(String m, String c, int s) {
model = m;
color = c;
maxSpeed = s;
}
Car(String model, String color, int maxSpeed) {
this.model = model;
this.color = color;
this.maxSpeed = maxSpeed;
}
5. 생성자를 이용한 인스턴스의 복사
- 현재 사용하고 있는 인스턴스의 값을 복사하여 이와 같은 값을 가지는 인스턴스를 만들 때 생성자를 사용
Car(String model, String color, int maxSpeed) {
this.model = model;
this.color = color;
this.maxSpeed = maxSpeed;
}
Car(Car car) {
this(car.model, car.color, car.maxSpeed);
}
Car c1 = new Car("그랜저", "검정", 300);
Car c2 = new Car(c2);