📘 1. 생성자의 특징
public class Person {
String name;
int age;
// 생성자
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
✅ 생성자의 특징 정리
클래스 이름과 동일한 이름을 가진 특수한 메서드이다.
리턴 타입이 없다. (void도 쓰지 않음)
객체가 생성될 때 자동으로 호출된다.
주로 멤버변수 초기화에 사용된다.
생성자가 명시되어 있지 않으면, 자바 컴파일러는 기본 생성자(default constructor) 를 자동으로 추가한다.
📘 2. 멤버변수와 매개변수 이름이 같은 경우 this. 사용
public class Student {
String name;
public Student(String name) {
this.name = name; // this 없으면 멤버변수에 값이 저장되지 않음
}
}
⚠️ 주의할 점
생성자의 매개변수 이름이 멤버변수 이름과 같을 경우, 자바는 매개변수만 인식한다.
이때 this.name은 멤버변수, name은 매개변수를 의미한다.
this.를 명시하지 않으면 멤버변수에 값을 할당할 수 없다.
즉, this.name = name; 이라고 해야 멤버변수에 값이 저장된다.
📘 3. 기본 생성자의 제공 여부
public class Car {
String model;
// 오버로딩된 생성자
public Car(String model) {
this.model = model;
}
}
🔍 설명
자바는 클래스에 생성자가 전혀 없을 경우, 매개변수가 없는 기본 생성자를 자동으로 제공한다.
하지만 위 코드처럼 생성자가 오버로딩 되어 있는 경우, 자바는 기본 생성자를 제공하지 않는다.
Car c1 = new Car(); // ❌ 컴파일 오류 발생!
따라서 오버로딩된 생성자가 있을 경우 기본 생성자도 직접 정의해야 한다.
public Car() {
this.model = "기본 모델";
}
📘 4. 생성자를 이용한 객체 복사
public class Book {
String title;
int price;
// 일반 생성자
public Book(String title, int price) {
this.title = title;
this.price = price;
}
// 복사 생성자
public Book(Book original) {
this.title = original.title;
this.price = original.price;
}
}
🧠 개념 설명
다른 객체의 값을 복사해서 새로운 객체 생성 시 사용
생성자의 매개변수로 같은 타입의 객체를 전달받음
깊은 복사 또는 얕은 복사의 기초로 활용됨
Book b1 = new Book("자바", 15000);
Book b2 = new Book(b1); // b1을 복사한 b2 생성
복사 생성자를 이용하면 독립적인 객체 복제가 가능하다.