Java Note - 생성자

m0ng·2025년 4월 9일

📘 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 생성
복사 생성자를 이용하면 독립적인 객체 복제가 가능하다.

0개의 댓글