728x90
반응형
생성자 오버로딩(overloading)
매개 변수를 달리하는 생성자를 여러개 선언하는 것
외부에서 제공되는 다양한 데이터를 사용하여 객체를 초기화하려면 생성자 역시 다양 해야한다
public class 클래스{
클래스([타입 매개변수, ...]){
}
//위와 아래는 생성자 오버로딩
//매개변수의 타입, 개수, 순서를 다르게 선언한다.
클래스([타입 매개변수, ...]){
}
}
예시1) 생성자 오버로딩
public class Car{
Car() { ... }
Car(String model) { ... }
Car(String model, String color) { ... }
Car(String model, String color, int speed) { ... }
}
생성자 오버로딩 시 주의할 점,
매개 변수의 타입과 개수 그리고 선언된 순서가 똑같을 경우 매개 변수 이름만 바꾸는 것은 생성자 오버로딩이 아니다.
//오버로딩이 아니다.
Car(String model, int speed) { ... }
Car(int speed, String model) { ... }
생성자가 오버로딩되어 있는 경우 new연산자로 생성자를 호출할 때 제공되는 매개값의 타입과 수에 의해 호출될 생성자가 결정 된다.
예시2) 생성자 오버로딩
public class Car {
// 필드
String company = "현대차";
String model;
String color;
int maxSpeed;
// 생성자 1
Car() { // 기본 생성자
}
// 생성자 2
Car(String model) {
this.model = model;
}
// 생성자 3
Car(String model, String color) {
this.model = model;
this.color = color;
}
// 생성자 4
Car(String model, String color, int maxSpeed) {
this.model = model;
this.color = color;
this.maxSpeed = maxSpeed;
}
}
public class CarEx {
public static void main(String[] args) {
// 생성자 1 호출
Car Car1 = new Car();
System.out.println("car1.company: " + Car1.company);
System.out.println();
// 생성자 2 호출
Car Car2 = new Car("자가용");
System.out.println("car2.company: " + Car2.company);
System.out.println("car2.model: " + Car2.model);
System.out.println();
// 생성자 3 호출
Car Car3 = new Car("대형차", "회색");
System.out.println("car3.company: " + Car3.company);
System.out.println("car3.model: " + Car3.model);
System.out.println("car3.color: " + Car3.color);
System.out.println();
// 생성자 4 호출
Car Car4 = new Car("택시", "검정", 200);
System.out.println("car4.company: " + Car4.company);
System.out.println("car4.model: " + Car4.model);
System.out.println("car4.color: " + Car4.color);
System.out.println("car4.color: " + Car4.maxSpeed);
System.out.println();
}
}
다른 생성자 호출: this( )
생성자 오버로딩 증가 시 중복 코드 발생할 수 있다.
이를 해결 하기 위해 생성자에서 다른 생성자를 호출할 때에 this()코드를 사용 한다.
필드 초기화 내용을 한 생성자에만 집중 작성하고 나머지 생성자는 초기화 내용을 가진 생성자로 호출을 한다.
클래스([매개변수, ... ]){
this(매개변수, ..., 값, ..); //클래스의 다른 생성자 호출
실행문;
}
this()는 자신의 다른 생성자를 호풀하는 코드로 반드시 생성자 첫 줄에서만 허용 된다.
예시3) 중복 코드 제거
public class Car {
// 필드
String company = "현대차";
String model;
String color;
int maxSpeed;
// 생성자 1
Car() { // 기본 생성자
}
// 생성자 2
Car(String model) { // 생성자 4 호출
this(model, "은색", 250);
}
// 생성자 3
Car(String model, String color) { // 생성자 4 호출
this(model, color, 250);
}
// 생성자 4
Car(String model, String color, int maxSpeed) {
this.model = model;
this.color = color;
this.maxSpeed = maxSpeed;
}
}
public class CarEx {
public static void main(String[] args) {
// 생성자 1 호출
Car Car1 = new Car();
System.out.println("car1.company: " + Car1.company);
System.out.println();
// 생성자 2 호출
Car Car2 = new Car("자가용");
System.out.println("car2.company: " + Car2.company);
System.out.println("car2.model: " + Car2.model);
System.out.println();
// 생성자 3 호출
Car Car3 = new Car("대형차", "회색");
System.out.println("car3.company: " + Car3.company);
System.out.println("car3.model: " + Car3.model);
System.out.println("car3.color: " + Car3.color);
System.out.println();
// 생성자 4 호출
Car Car4 = new Car("택시", "검정", 200);
System.out.println("car4.company: " + Car4.company);
System.out.println("car4.model: " + Car4.model);
System.out.println("car4.color: " + Car4.color);
System.out.println("car4.color: " + Car4.maxSpeed);
System.out.println();
}
}
※용어 정리
- 오버로딩: 매개 변수를 달리하는 생성자를 여러개 선언하는 것
- this(): 객체 자신의 또 다른 생성자를 호출할 때 사용
본 내용은 #혼자공부하는자바 책을 참고해 공부하려 작성했습니다.
728x90
반응형
'Work & Study > JAVA (& 혼공자Java)' 카테고리의 다른 글
자바(Java) - 메소드2 (매개 변수 선언) (0) | 2020.10.07 |
---|---|
자바(Java) - 메소드1 (메소드 선언) (0) | 2020.10.07 |
자바(Java) - 생성자 (Constructor)1 (0) | 2020.09.28 |
자바(Java) - 필드 (Field) (0) | 2020.09.28 |
자바(Java) - 객체 지향 프로그래밍2 (0) | 2020.09.28 |