자바

JAVA 자바 생성자 오버로딩과 다른 생성자 호출(this())

알통몬_ 2017. 3. 12. 19:19
반응형


안녕하세요 알통몬입니다.

공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^

 

생성자 오버로딩(Overloading)

생성자 오버로딩이란 매개 변수를 달리하는 생성자를 여러개 선언하는 것을 말합니다.

http://blog.naver.com/rain483/220514884383

오버로딩과 오버라이딩을 다형성이라 말합니다.

예제)

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;

}

}


예제2)

public class CarExample {

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.model : " + car2.model);

System.out.println();

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();

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()코드를 사용합니다.


클래스([매개변수선언,...]) {

    this(매개변수, '...,값,...); 클래스의 다른 생성자 호출

   실행문;

}


this() 는 자신의 다른 생성자를 호출하는 코드로 반드시 생성자의 첫줄에서만 허용됩니다. 

this()의 매개값은 호출되는 생성자의 매개 변수 타입에 맞게 제공해야 합니다.



Car(String model) {

this.model = model;

this.color = "은색";

this.maxSpeed = 250;

}

Car(String model, String color) {

this.model = model;

this.color = color;

this.maxSpeed = 250;

}

Car(String model, String color, int maxSpeed) {

this.model = model;

this.color = color;

this.maxSpeed = maxSpeed;

}

위 코드의 중복을 제거하는 예제를 보겠습니다.

중복 코드 제거 예제)

예제1)

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, color, 250);

}

Car(String model, String color, int maxSpeed) {  // 공통 실행 코드

this.model = model;

this.color = color;

this.maxSpeed = maxSpeed;

}

}

예제2)

public class CarExample {

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.model : " + car2.model);

System.out.println();

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();

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);

}

}

반응형