Java
[Java] 자바 생성자(Constructor) 개념 및 기본 생성자 자동 생성 조건
clolee
2025. 4. 8. 13:37
✅ 자바 생성자(Constructor) 개념 및 기본 생성자 자동 생성 조건 완전 정리
🔷 0️⃣ 생성자란 무엇인가?
📌 정의
**생성자(Constructor)**는 클래스가 객체로 생성될 때 호출되는 특수한 메서드입니다.
객체가 생성될 때 초기화 작업을 수행하며, 클래스 이름과 동일한 이름을 가지며 반환 타입이 없습니다.
✅ 왜 필요한가?
| 역할 | 설명 |
|---|---|
| 객체 초기화 | 객체 생성 시 필드 값을 원하는 값으로 설정 가능 |
| 기본 상태 보장 | 초기화 코드 없이 객체가 불완전한 상태로 생성되는 것을 방지 |
| 생성자 오버로딩 | 다양한 생성 방식 지원 가능 (기본값, 필수값 등) |
✅ 생성자 기본 형식
public class Student {
String name;
int score;
// 생성자
public Student(String name, int score) {
this.name = name;
this.score = score;
}
}🔷 1️⃣ 기본 생성자의 자동 생성 조건
✅ 생성자를 정의하지 않았을 때
class Student {
String name;
int score;
}- 🔹 생성자가 없으므로 컴파일러가 자동으로 기본 생성자 Student()를 생성
- 🔹 이 경우 별도로 작성하지 않아도 다음 코드가 정상 동작함:
Student s = new Student(); // ✅ 자동 생성된 기본 생성자 사용📌 자동 생성된 기본 생성자는 내부적으로 super(); 호출만 수행합니다.
❌ 생성자를 하나라도 정의하면?
class Student {
public Student(String name) {
this.name = name;
}
}- 🔸 생성자를 정의한 순간, 컴파일러는 기본 생성자를 더 이상 만들지 않음
- 🔸 다음 코드에서 컴파일 오류 발생:
Student s = new Student(); // ❌ 컴파일 에러: 생성자 없음✅ 해결 방법: 명시적으로 기본 생성자 추가
public Student() {
// 기본 생성자 수동 정의
}이렇게 하면 new Student()가 다시 가능해집니다.
public Student() {
// 기본 생성자 직접 정의
}🧠 한 줄 정리
자바는 클래스에 생성자를 하나도 정의하지 않았을 때만 기본 생성자를 자동으로 생성해준다.
하나라도 생성자를 만들면, 기본 생성자도 직접 정의해야 사용 가능하다.
🔷 2️⃣ 생성자 오버로딩 (Overloading)
자바에서는 **생성자를 여러 개 정의(오버로딩)**할 수 있습니다.
public class Student {
String name;
int score;
// 기본 생성자
public Student() {
this("이름 없음", 0); // 다른 생성자 호출
}
// 오버로딩 생성자
public Student(String name, int score) {
this.name = name;
this.score = score;
}
}🔁 this(...)를 통해 다른 생성자를 호출할 수 있으며, 반드시 생성자의 첫 줄에 와야 합니다.
🔷 3️⃣ 생성자에서 필드 초기화 순서
- 클래스 필드가 선언된 순서대로 기본값으로 초기화됨
- 명시적 필드 초기값이 있을 경우, 해당 값으로 덮어씀
- 생성자에서 값이 다시 설정됨
예:
class Person {
String name = "기본 이름"; // 2단계
int age;
Person() {
this.name = "홍길동"; // 3단계
}
}✅ 함께 알아두면 좋은 키워드
| 키워드 | 설명 |
|---|---|
| this() | 생성자 내부에서 다른 생성자 호출 |
| super() | 생성자 내부에서 부모 클래스 생성자 호출 |
| 생성자 오버로딩 | 다양한 초기화 방식 제공 (디폴트, 이름만, 전체 필드 등) |
| 초기화 블록 | 복잡한 공통 초기화가 필요할 경우 사용 ({} 블록) |
이어서 :
2025.04.08 - [Java] - [Java] 자바 생성자 확장 설명 (생성자 체이닝, 생성자 오버로딩)