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. 자식 클래스 호출 생성자