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

+ Recent posts