728x90
생성자 오버로딩
매개 변수를 달리하는 생성자를 여러 개 선언하는 것을 말한다.
생성자 오버로딩 시 주의할 점은 매개 변수의 타입과 개수 그리고 선언된 순서가 달라야 한다는 것이다.
즉, 매개 변수의 타입과 개수 그리고 선언된 순서가 똑같을 경우
매개 변수의 이름만 바꾸는 것은 오버로딩이 아니라는 것이다.
public class Car {
String company = "기아";
String color;
int maxSpeed;
// 생성자1
Car(){
}
// 생성자2
Car(String color){
this.color = color;
}
// 생성자3
Car(String color, int maxSpeed){
this.color = color;
this.maxSpeed = maxSpeed;
}
}
public class CarEx {
public static void main(String[] args) {
Car car1 = new Car();
System.out.println("car1.company : " + car1.company);
System.out.println();
Car car2 = new Car("하얀색");
System.out.println("car2.company : " + car2.company);
System.out.println("car2.color : " + car2.color);
System.out.println();
Car car3 = new Car("검은색", 200);
System.out.println("car3.company : " + car3.company);
System.out.println("car3.color : " + car3.color);
System.out.println("car3.maxSpeed : " + car3.maxSpeed);
}
}
// 결과
car1.company : 기아
car2.company : 기아
car2.color : 하얀색
car3.company : 기아
car3.color : 검은색
car3.maxSpeed : 200
이렇게 생성자 오버로딩이 많아지면 생성자 간의 중복된 코드가 발생할 수 있다.
이 경우에는 필드 초기화 내용은 한 생성자에만 집중적으로 작성하고
나머지 생성자는 초기화 내용을 가지고 있는 생성자를 호출하는 방법으로 개선할 수 있다.
생성자에서 다른 생성자를 호출할 때에는 this()를 사용하면 된다.
public class Car {
// 필드
String company = "기아";
String color;
int maxSpeed;
// 생성자
Car(){
}
Car(String color){
this(color,100);
}
Car(String color, int maxSpeed){
this.color = color;
this.maxSpeed = maxSpeed;
}
}
public class CarEx {
public static void main(String[] args) {
Car car1 = new Car();
System.out.println("car1.company : " + car1.company);
System.out.println();
Car car2 = new Car("하얀색");
System.out.println("car2.company : " + car2.company);
System.out.println("car2.color : " + car2.color);
System.out.println();
Car car3 = new Car("검은색", 200);
System.out.println("car3.company : " + car3.company);
System.out.println("car3.color : " + car3.color);
System.out.println("car3.maxSpeed : " + car3.maxSpeed);
}
}
// 결과
car1.company : 기아
car2.company : 기아
car2.color : 하얀색
car3.company : 기아
car3.color : 검은색
car3.maxSpeed : 200
this()는 자신의 다른 생성자를 호출하는 코드로 반드시 생성자의 첫 줄에서만 허용된다.
메소드 오버로딩
클래스 내에 같은 이름의 메소드를 여러 개 선언하는 것을 말한다.
메소드 오버로딩의 조건 또한 매개 변수의 타입, 개수, 순서 중 하나가 달라야 한다.
public class Calculator {
double areaRect(double width) {
return width * width;
}
double areaRect(double width, double heigh) {
return width * heigh;
}
}
public class CalculatorEx {
public static void main(String[] args) {
CalculatorEx cal = new CalculatorEx();
double result = cal.areaRect(10);
System.out.println("정사각형 넓이 : " + result);
double result2 = cal.areaRect(10,20);
System.out.println("직사각형 넓이 : " + result2);
}
}
// 결과
정사각형 넓이 : 100.0
직사각형 넓이 : 200.0
728x90
'국비 지원 > JAVA' 카테고리의 다른 글
[JAVA] 인스턴스 멤버, 정적 멤버 - static (0) | 2023.05.13 |
---|---|
[JAVA] 날짜 클래스(SimpleDateFormat와 Calendar) (0) | 2023.05.07 |
[JAVA] 필드, 생성자 - 기본 생성자, 메소드 (0) | 2023.05.06 |
[JAVA] 멤버변수, 지역변수, 전역변수 (0) | 2023.05.06 |
[JAVA] 배열 생성 new 연산자 (0) | 2023.05.03 |