본문 바로가기

카테고리 없음

생성자

자바에서 생성자는 객체를 생성할 때 호출되는 특별한 메서드입니다. 생성자의 주요 목적은 객체를 초기화하는 것입니다. 생성자는 클래스와 동일한 이름을 가지며, 반환 타입이 없습니다.

생성자의 기본 개념
생성자의 정의: 생성자는 클래스의 이름과 동일하며, 반환 타입이 없습니다. 기본적으로 객체가 생성될 때 자동으로 호출됩니다.

기본 생성자 (Default Constructor): 명시적으로 생성자를 정의하지 않으면, 자바 컴파일러가 기본 생성자를 자동으로 생성합니다. 기본 생성자는 파라미터가 없는 생성자입니다.

사용자 정의 생성자: 클래스에서 생성자를 명시적으로 정의할 수 있습니다. 이러한 생성자는 클래스의 필드를 초기화하거나 특정 작업을 수행할 수 있습니다.

생성자 정의와 사용
1. 기본 생성자
클래스에 생성자를 명시적으로 정의하지 않으면, 자바 컴파일러는 기본 생성자를 자동으로 추가합니다.

java
코드 복사
public class Person {
    String name;
    int age;
}

// 객체 생성
Person p = new Person();
여기서 Person 클래스는 기본 생성자를 사용하여 객체를 생성합니다.

2. 사용자 정의 생성자
사용자 정의 생성자는 필드를 초기화하는 데 유용합니다. 생성자는 매개변수를 받아 객체의 초기 상태를 설정할 수 있습니다.

예제:

java
코드 복사
public class Person {
    String name;
    int age;

    // 사용자 정의 생성자
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // 메서드
    public void introduce() {
        System.out.println("My name is " + name + " and I am " + age + " years old.");
    }
}

// 객체 생성
public class Main {
    public static void main(String[] args) {
        Person p = new Person("Alice", 30);
        p.introduce(); // My name is Alice and I am 30 years old.
    }
}
여기서 Person 클래스는 name과 age를 초기화하는 사용자 정의 생성자를 정의합니다. 객체를 생성할 때 이 생성자를 사용하여 name과 age를 설정합니다.

3. 생성자 오버로딩
하나의 클래스에 여러 생성자를 정의할 수 있으며, 이를 생성자 오버로딩이라고 합니다. 생성자 오버로딩은 서로 다른 매개변수를 가진 여러 생성자를 정의하여 객체를 다양한 방법으로 초기화할 수 있게 합니다.

예제:

java
코드 복사
public class Person {
    String name;
    int age;

    // 기본 생성자
    public Person() {
        this.name = "Unknown";
        this.age = 0;
    }

    // 사용자 정의 생성자
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

// 객체 생성
public class Main {
    public static void main(String[] args) {
        Person p1 = new Person(); // 기본 생성자 호출
        Person p2 = new Person("Bob", 25); // 사용자 정의 생성자 호출

        System.out.println(p1.name + " " + p1.age); // Unknown 0
        System.out.println(p2.name + " " + p2.age); // Bob 25
    }
}
여기서 Person 클래스는 기본 생성자와 사용자 정의 생성자를 모두 가지고 있으며, 두 생성자를 사용하여 객체를 다양한 방법으로 초기화할 수 있습니다.

생성자의 주요 특징
생성자는 반환 타입이 없다: 메서드와 달리 생성자는 반환 타입이 없으며, 클래스의 이름과 동일한 이름을 가집니다.
자동 호출: 객체가 생성될 때 생성자가 자동으로 호출됩니다.
객체 초기화: 생성자는 객체의 필드를 초기화하거나 객체의 초기 상태를 설정하는 데 사용됩니다.
오버로딩: 여러 생성자를 정의하여 다양한 방법으로 객체를 초기화할 수 있습니다.
생성자와 this 키워드
this 키워드: 생성자 내부에서 this 키워드는 현재 객체를 참조합니다. 주로 매개변수와 필드의 이름이 동일할 때, 필드에 값을 할당하기 위해 사용됩니다.
예제:

java
코드 복사
public class Person {
    String name;
    int age;

    // 사용자 정의 생성자
    public Person(String name, int age) {
        this.name = name; // this.name는 클래스 필드, name은 매개변수
        this.age = age;
    }
}
여기서 this.name은 클래스의 필드를, name은 생성자의 매개변수를 참조합니다.

이러한 개념을 이해하면 자바에서 객체를 효과적으로 생성하고 초기화할 수 있으며, 다양한 초기화 방법을 통해 더 유연한 프로그램을 작성할 수 있습니다.