JAVA 생성자 정리(2)
자바를 공부하던 중 생성자부분이 계속 헷갈려서 확실하게 정리해두기로 하였다.
혼자 공부하는 자바(신용권 지음, 한빛미디어) 책을 참고하였다.
생성자 오버로딩
외부에서 제공되는 다양한 데이터들을 이용해서 객체를 초기화하려면 생성자도 다양화될 필요가 있다.
객체를 생성할 때 외부에서 제공되는 데이터가 없다면 기본생성자로 그 객체를 생성하고,
외부에서 데이터가 제공될 경우에도 객체를 생성할 수 있어야 한다.
그래서 자바는 다양한 방법으로 객체를 생성할 수 있도록 생성자 오버로딩을 제공한다.
생성자 오버로딩이란 매개변수를 달리하는 생성자를 여러개 선언하는 것을 말한다.
Car 클래스에서 생성자를 오버로딩한 예
public class Car {
Car() {...}
Car(String model) {...}
Car(String model, String color) {...}
Car(String model, String color, int maxSpeed) {...}
}
생성자 오버로딩시 주의할 점은 매개 변수의 타입과 개수, 그리고 선언된 순서가 똑같을 경우
매개변수 이름만 바꾸는 것은 생성자 오버로딩이 아니라는 점이다.
Car(String model, String color) {...}
Car(String color, String model) {...} -> 이것은 오버로딩이 아님
생성자가 오버로딩이 되어있을 경우, new 연산자로 생성자를 호출할 때 제공되는 매개값의 타입과 수에 의해 호출될
생성자가 결정됩니다.
다음은 다양한 방법으로 Car 객체를 생성한다.
Car car1 = new Car();
Car car2 = new Car("그랜저");
Car car3 = new Car("그랜저", "흰색");
Car car1 = new Car("그랜저", "흰색", 300);
<소스>
public class Car {
String company = "현대자동차";
String model; //필드
String color;
int maxSpeed;
Car() {
//생성자1
}
Car(String model) {
this.model = model; //생성자2
}
Car(String model, String color) { //생성자3
this.model = model;
this.color = color;
}
Car(String model, String color, int maxSpeed) { //생성자4
this.model = model;
this.color = color;
this.maxSpeed = maxSpeed;
}
}
public class CarExample {
public static void main(String[] args) {
Car car1 = new Car();
System.out.println(car1.company);
System.out.println();
Car car2 = new Car("자가용");
System.out.println(car2.company);
System.out.println(car2.model);
System.out.println();
Car car3 = new Car("자가용", "빨강");
System.out.println(car3.company);
System.out.println(car3.model);
System.out.println(car3.color);
System.out.println();
Car car4 = new Car("택시", "검정", 200);
System.out.println(car4.company);
System.out.println(car4.model);
System.out.println(car4.color);
System.out.println(car4.maxSpeed);
}
}
다른 생성자 호출: this()
생성자 오버로딩이 많아질 경우 생성자 간의 중복된 코드가 발생할 수 있다. 매개 변수의 수만 달리하고 필드 초기화 내용이 비슷한
생성자에서 이러한 현상을 많이 볼 수 있다. 이 경우에는 필드 초기화 내용은 한 생성자에서만 집중적으로 작성하고 나머지 생성자는 초기화 내용을 가지고 있는 생성자를 호출하는 방법으로 개선할 수 있다.
생성자에서 다른 생성자를 호출할 때에는 다음과 같이 this()코드를 사용한다.
클래스([매개변수...]) {
this(매개변수, ..., 값,...); // 클래스의 다른 생성자 호출
실행문;
}
this()는 자신의 다른 생성자를 호출하는 코드로 반드시 생성자의 첫 줄에서만 허용된다.
this()의 매개값은 호출되는 생성자의 매개변수에 맞게 제공해야 한다. this() 다음에는 추가적인 실행문들이 올 수 있다.
이 말흔 호출되는 생성자의 실행이 끝나면 원래 생성자로 돌아와서 다음 실행문을 진행한다는 뜻이다.
<소스>
public class Car {
String company = "현대자동차";
String model; //필드
String color;
int maxSpeed;
Car() {
}
Car(String model) {
this(model, "은색", 250);
}
Car(String model, String color) {
this(model, "은색", 250);
}
Car(String model, String color, int maxSpeed) {
this.model = model;
this.color = color;
this.maxSpeed = maxSpeed;
}
}
public class CarExample {
public static void main(String[] args) {
Car car1 = new Car();
System.out.println(car1.company);
System.out.println();
Car car2 = new Car("자가용");
System.out.println(car2.company);
System.out.println(car2.model);
System.out.println();
Car car3 = new Car("자가용", "빨강");
System.out.println(car3.company);
System.out.println(car3.model);
System.out.println(car3.color);
System.out.println();
Car car4 = new Car("택시", "검정", 200);
System.out.println(car4.company);
System.out.println(car4.model);
System.out.println(car4.color);
System.out.println(car4.maxSpeed);
}
}
'JAVA' 카테고리의 다른 글
[JAVA] JAVA 생성자(1) (0) | 2020.03.27 |
---|---|
[JAVA] JAVA 예제(5) (0) | 2020.03.23 |
[JAVA] JAVA 예제(4) (0) | 2020.03.23 |
[JAVA] JAVA예제 (3) (0) | 2020.03.23 |
[JAVA] JAVA 예제(2) (0) | 2020.03.17 |