728x90
생성자를 다양화해야 하는 이유
객체를 생성할 때 외부의 값으로 객체를 초기화할 필요가 있다.
외부의 값이 어떤 타입으로 몇 개가 제공될 지 모르기 때문에 생성자도 다양화해질 필요가 있다.
생성자 오버로딩(Overloading)
매개변수의 타입, 개수, 순서가 다른 생성자를 여러 개 선언하는 것
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) {...} //오버로딩이 아님 , 매개변수의 타입과 갯수가 같기 때문에
예제)
package sec07.exam03_constructor_overloading;
public class Car
{
String company = "현대자동차";
String model;
String color;
int maxSpeed;
Car()
{
}
Car(String model)
{
this.model = model;
}
Car(String model, String color)
{
this.model = model;
this.color = color;
}
Car(String model, String color, int maxSpeed)
{
this.model = model;
this.color = color;
this.maxSpeed = maxSpeed;
}
Car(String model, int maxSpeed, String color ) //생성자 오버로딩 가능 String int String 이기 때문에 위의 String String int와는 다름
{
this.model = model;
this.color = color;
this.maxSpeed = maxSpeed;
}
}
package sec07.exam03_constructor_overloading;
public class CarExample
{
public static void main(String[] args)
{
Car car1 = new Car();
System.out.println("car1.company :" + car1.company);
System.out.println("car1.model :" + car1.model);
System.out.println("car1.color :" + car1.color);
System.out.println("car1.maxSpeed :" + car1.maxSpeed);
Car car2 = new Car("자가용");
System.out.println("car2.company :" + car2.company);
System.out.println("car2.model :" + car2.model);
System.out.println("car2.color :" + car2.color);
System.out.println("car2.maxSpeed :" + car2.maxSpeed);
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("car3.maxSpeed :" + car3.maxSpeed);
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.maxSpeed :" + car4.maxSpeed);
}
}
다른 생성자 호출 (this())
생성자가 오버로딩되면 생성자 간의 중복된 코드가 발생할 수 있다.
초기화 내용이 비슷한 생성자들에서 이러한 현상을 많이 볼 수 있다.
this() : 객체의 다른 생성자를 호출
해결 방법 :
1. 초기화 내용을 한 생성자에 몰아서 작성한다.
2. 다른 생성자는 초기화 내용을 작성한 생성자를 this(...)로 호출한다.
Car(String model)
{
//호출
this(model,null,0);
}
Car(String model, String color)
{
//호출
this(model,color,0);
}
Car(String model, String color, int maxSpeed)
{
//공통 실행 코드
this.model = model;
this.color = color;
this.maxSpeed = maxSpeed;
}
예제)
package sec07.exam04_other_constructor_call;
public class Car
{
String company = "현대자동차";
String model;
String color;
int maxSpeed;
Car()
{
}
Car(String model)
{
//System.out.println("Car(String model) 실행");
//항상 다른 생성자를 호출하는 코드는 생성자의 첫줄에 와야함. 아니면 에러
this(model, null, 0);
}
Car(String model, String color)
{
this(model, color, 0);
}
Car(String model, String color, int maxSpeed)
{
this.model = model;
this.color = color;
this.maxSpeed = maxSpeed;
}
}
728x90
'프로그래밍 언어 > JAVA' 카테고리의 다른 글
[JAVA] 클래스의 구성 멤버 / 메소드(2) (0) | 2021.06.23 |
---|---|
[JAVA] 클래스의 구성 멤버 / 메소드(1) (0) | 2021.06.22 |
[JAVA] 클래스의 구성 멤버 / 생성자(1) (0) | 2021.06.21 |
[JAVA] 클래스의 구성 멤버 / 필드 (0) | 2021.06.21 |
[JAVA] 객체와 클래스 (0) | 2021.06.18 |