JAVA의 가장 기본이 되는 내용

생성자 - this()와 오버로딩

cwchoiit 2024. 3. 26. 14:57
728x90
반응형
SMALL

생성자 개념은 익숙하다고 해도 오버로딩 시 this()를 사용하는 경우가 어떤 경우가 있는지 좀 명확하게 하기 위해 작성을 해본다.

예를 들어, 다음과 같은 코드가 있다고 해보자.

 

Student

public class Student {
    private String name;
    private int age;
    private int grade;

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
        this.grade = 0;
    }

    public Student(String name, int age, int grade) {
        this.name = name;
        this.age = age;
        this.grade = grade;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getGrade() {
        return grade;
    }

    public void setGrade(int grade) {
        this.grade = grade;
    }
}

 

이 Student 클래스는 두 개의 생성자를 가지고 있다. 하나는 'name'과 'age'를 받는것과 나머지 하나는 'name', 'age', 'grade'를 받는것. 그리고 'grade'를 받지 않는 생성자를 사용할 땐 일단 점수는 0이라고 가정하고 'grade'에 0을 대입한다.

 

그런데 자세히 보면, 두 생성자가 거의 같은 코드이다. 이 중복을 어떻게 없앨 순 없을까? 그때 사용하는 것이 this()이다.

그래서 this()를 사용한 리팩토링 코드는 다음과 같다.

public Student(String name, int age) {
    this(name, age, 0);
}

public Student(String name, int age, int grade) {
    this.name = name;
    this.age = age;
    this.grade = grade;
}

이전 코드와 비교해보면 중복이 확실히 제거됐음을 알 수 있다. 이게 바로 this() 키워드이다.

 

주의

this()를 쓸 때 주의할 점이 있다. this()는 반드시 첫 줄에 있어야 한다. 예를 들어 다음과 같이 첫 줄이 아니면 에러가 발생한다.

public Student(String name, int age) {
    System.out.println("생성자 호출");
    this(name, age, 0);
}

 

그 에러 내용은 다음과 같다. 첫 줄에 적으라고 알려준다.

728x90
반응형
LIST