JAVA
JAVA ) 생성자의 중복 초기화를 축약시키는 this()클래스
알아가는 번데기
2020. 5. 25. 20:00
생성자,메소드에서 매개값으로 받은 인스턴스를 해당 클래스 필드 변수에 대입하여 초기화 하는 방법에 대해서
몇 주전에 다뤄본적이 있다,
this.매개변수 = 필드변수;
하지만 해당 개념만 숙지한뒤 모든것을 아는 것 처럼 넘어 갔지만 this클래스의 기능을 간과하고 있었던것 같다..
오늘은 간과했던 this의 또 다른 기능에 대해서 포스팅 해볼려고 한다.
메소드가 오버로딩이 가능하듯이 생성자또한 오버로딩이 가능하다,
이때 생성자 오버로딩이 많아질 경우 생성자 간의 중복된 코드가 발생할 수 있다.
매개 변수의 수만 달리 하고 필드 초기화 내용이 비슷한 생성자에서 이러한 현상을 많이 볼 수 있다
이 경우에 필드 초기화를 담당하는 기능은 한 생성자에만 집중적으로 작성하고 나머지 생성자는 초기화 내용을 가지고 있는 생성자를 호출하는 방법으로 개선할 수 있다.
필드 초기화를 담당하는 생성자가 사용하는 것이 바로 this() 클래스이다.
public class Car{
public Car(){ // 초기화를 담당하는 생성자또한 매개변수를 입력하여 호출이 가능하다.
this(매개변수 값); // 매개변수 값이 여러값일떄 , 를 사용한다.
실행문 // 초기화 기능을 마친후 뒤에 붙는 실행문을 동작시킨다.
}
}
* this()는 무조건 생성자의 첫줄에 작성되어야 한다.
* 호출되는 생성자의 실행이 끝나면 원래 생성자로 돌아와서 다음 실행문을 진행한다.
그렇다면 클래스 상속관계에서 this()클래스를 사용한 생성자 실행순서를 알아보자
// 부모 클래스
public class Car{
public String name;
public Car(){
this("조재영");
System.out.println("Car 기본 생성자 입니다.");
}
public Car(String name){
this.name = name;
System.out.println("Car 호출된 생성자 입니다.");
}
}
// 자식 클래스
public class Tire extends Car {
public int age;
public Tire(){
this(24);
System.out.println("Tire 기본 생성자 입니다.");
}
public Tire(int age){
this.age = age;
System.out.println("Tire 호출 생성자 입니다. ");
}
}
// main 클래스
public class Main {
public static void main(String[] args){
Tire t1 = new Tire();
}
}
생성자 실행순서
1. 부모 클래스 기본 생성자
2. 부모 클래스 호출 생성자
3. 자식 클래스 기본 생성자
4. 자식 클래스 호출 생성자