✅ 생성자 ✅ new 연산자 ✅ this ✅ 인스턴스 복사
constructor
인스턴스가 생성될 때 호출되는 '인스턴스 초기화 메서드'
class Card{
// 매개변수가 없는 생성자
Card(){
...
}
// 매개변수가 있는 생성자
Card(String k, int num){
...
}
}
Card c = new Card();
default constructor
클래스에 생성자가 하나도 없으면 컴파일러가 기본 생성자를 추가한다.
class Data1{
int value;
// 생성자 없으므로 컴파일러가 기본 생성자 추가
}
class Data2{
int value;
Data2(int){ // 매개변수가 있는 생성자
value = x;
}
// 생성자가 있으므로 컴파일러는 기본 생성자를 추가하지 않음
// 기본 생성자를 만들지 않았음.
}
class ConstructorTest{
public static void main(String[] args){
Data1 d1 = new Data1(); // ok
Data2 d2 = new Data2(); // 컴파일 에러
}
}
위 문제를 해결하기 위해서는 Data2 클래스에 기본 생성자를 추가해주던가,매개변수가 있는 생성자만을 사용해야 함
인스턴스를 생성한 다음에 인스턴스 변수의 값을 변경하는 것보다 매개변수를 갖는 생성자를 사용하는 것이 코드를 보다 간결하고 직관적으로 만든다.
class Car{
String color;
String gearType;
int door;
// 생성자
Car(){};
// 매개변수가 있는 생성자
Car(String c, String g, ing d){
color = c;
gearType = g;
door = d;
}
}
// 비효율적
Car c = new Car();
c.color = "white";
c.gearType = "auto";
c.door = 4;
// 효율적
Car c = new Car("white", "auto", 4);
class Car{
String color;
String gearType;
int door;
// 생성자 예시1 - 비효율적
Car(){
color = "white";
gearType = "auto";
door = 4;
};
// 생성자 예시2 - 효율적
Car(){
this("white","auto",4); // 다른 생성자를 활용하여 코드의 재사용성을 높였다.
};
// 매개변수가 있는 생성자
Car(String c, String g, ing d){
color = c;
gearType = g;
door = d;
}
}
인스턴스 자신을 가리키는 참조변수로, 인스턴스 주소가 저장되어 있다.
class Car{
String color;
String gearType;
int door;
// 생성자
Car(){
this("white","auto",4);
};
// 매개변수가 있는 생성자1
Car(String c, String g, ing d){
color = c;
gearType = g;
door = d;
}
// 매개변수가 있는 생성자2
Car(String color, String gearType, ing door){
this.color = color;
this.gearType = gearType;
this.door = door;
}
}
두번째 생성자가 더 바람직하다.
class Car{
String color;
String gearType;
int door;
// 생성자
Car(){
this("white","auto",4);
};
Car(String color, String gearType, ing door){
this.color = color;
this.gearType = gearType;
this.door = door;
}
// 인스턴스 복사를 위한 생성자
Car(Car c){
color = c.color;
gearType = c.gearType;
door = c.door;
}
}
class MyMathTest3{
public static void main(String args[]){
Car c1 = new Car();
Car c2 = new Car(c1); // 인스턴스 복사
}
}