✅ 자바 생성자 확장 설명
🧩 포함 내용
this()
키워드와 생성자 간 호출 관계- 생성자 오버로딩 (Constructor Overloading)
- 기본값 초기화 순서 (필드 → 생성자)
- 정리 요약
✅ 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()는 생성자의 첫 줄에서만 사용할 수 있음!
🔍 보충 설명: 왜 이런 결과가 나왔는가?
new Student();
→ 기본 생성자 호출됨- 기본 생성자 안에서
this("이름 없음", 0);
→ 다른 생성자 호출됨 this.name
과this.score
에 값이 대입됨- 결과적으로
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 생성자 호출 |
'Java' 카테고리의 다른 글
[Java] 왜 `this()` 생성자 체이닝을 사용하는가? (0) | 2025.04.08 |
---|---|
[Java] 자바에서 기본 생성자의 자동 생성 여부와 사용 조건 (0) | 2025.04.08 |
[Java] Java의 키워드들과 JVM 메모리 영역의 관계 정리 (0) | 2025.04.08 |
[Java] Java 키워드 조합 의미 (0) | 2025.04.08 |
[Java] Java 키워드 정리 (0) | 2025.04.08 |
댓글