본문 바로가기
Work & Study/JAVA (& 혼공자Java)

자바(Java) - 생성자 (Constructor)2

by a.k.a DUKI 2020. 10. 5.
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
반응형