본문 바로가기
Java

[Java] 자바 생성자 확장 설명 (생성자 체이닝, 생성자 오버로딩)

by clolee 2025. 4. 8.

✅ 자바 생성자 확장 설명


🧩 포함 내용

  1. this() 키워드와 생성자 간 호출 관계
  2. 생성자 오버로딩 (Constructor Overloading)
  3. 기본값 초기화 순서 (필드 → 생성자)
  4. 정리 요약

✅ 1️⃣ this() — 생성자 내부에서 다른 생성자 호출

자바에서 같은 클래스 내에 여러 생성자가 있을 때,

하나의 생성자에서 다른 생성자를 호출할 때 사용하는 키워드this()입니다.


📌 예제

class Student {
    String name;
    int score;

    // 기본 생성자
    public Student() {
        this("이름 없음", 0);  // 다른 생성자 호출
        System.out.println("기본 생성자 호출됨");
    }

    // 오버로딩 생성자
    public Student(String name, int score) {
        this.name = name;
        this.score = score;
        System.out.println("매개변수 생성자 호출됨");
    }
}
Student s = new Student();

출력 결과:

매개변수 생성자 호출됨
기본 생성자 호출됨

✅ 그럼 s.name과 s.score는?

  • this("이름 없음", 0) 을 통해 다른 생성자 호출
  • 그 생성자에서 this.name = name;, this.score = score; 실행
System.out.println(s.name);   // 출력: 이름 없음
System.out.println(s.score);  // 출력: 0

🧠 this()는 생성자의 첫 줄에서만 사용할 수 있음!


🔍 보충 설명: 왜 이런 결과가 나왔는가?

  1. new Student(); → 기본 생성자 호출됨
  2. 기본 생성자 안에서 this("이름 없음", 0); → 다른 생성자 호출됨
  3. this.namethis.score 에 값이 대입됨
  4. 결과적으로 s.name = "이름 없음", s.score = 0 으로 초기화됨

🧠 정리

this()는 생성자 체이닝을 통해

다양한 초기화 방식을 일관되게 구현할 수 있게 해주는 강력한 도구입니다.


✅ 2️⃣ 생성자 오버로딩 (Constructor Overloading)

  • 같은 클래스 안에 이름은 같지만, 매개변수 타입/개수/순서가 다른 생성자를 여러 개 정의할 수 있음
  • 객체를 다양한 방식으로 초기화할 수 있도록 유연하게 만듦

📌 예시

class Student {
    String name;
    int age;

    public Student() {
        this("이름 없음", 0);  // 기본값 제공
    }

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

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

이 구조 덕분에 다음과 같이 다양한 생성 방식 가능:

new Student();               // 기본 생성자
new Student("홍길동");        // 이름만 전달
new Student("홍길동", 18);    // 이름 + 나이

✅ 3️⃣ 자바의 필드 초기화 순서

객체가 생성될 때 필드 초기화 → 생성자 호출 순서로 작동합니다.


📌 예제

class Student {
    String name = "초기값";

    public Student() {
        System.out.println("name = " + name);  // name 필드 먼저 초기화된 상태
    }
}
Student s = new Student();

출력: name = 초기값

✅ 즉, 필드에 초기값을 미리 지정해두면,

생성자에서 그 값을 덮어쓸 수도 있고 그대로 사용할 수도 있습니다.


✅ 보너스: this vs this()

키워드 의미 사용 위치
this 현재 객체 자기 자신 메서드/생성자 내
this() 같은 클래스 내 다른 생성자 호출 생성자 내 첫 줄에만 사용 가능

🧠 전체 요약

개념 요약
기본 생성자 자동 생성 생성자 정의 없을 때만 자동 생성됨
this() 같은 클래스 내 다른 생성자 호출
생성자 오버로딩 다양한 초기화 방식 제공 가능
초기화 순서 필드 → 생성자
this vs this() 객체 참조 vs 생성자 호출

댓글