생성자(Constructor)

Soobin Kim·2024년 3월 27일

Java

목록 보기
14/47

생성자

인스턴스가 생성될 때마다 new 연산자에 의해 호출되는 인스턴스 초기화 메서드

생성자 역할 및 필요성

  1. 객체 준비: 생성자는 객체 사용을 준비하는 단계에서, 즉 객체가 생성되기 전에 필드 초기화 방법을 정한다.

  2. 객체 생성 및 초기화: new 연산자와 함께 생성자가 호출되면 자신이 가지고 있는 멤버들을 메모리에 올려 객체가 메모리에 생성되도록 하는 역할을 한다. 해당 객체의 주소가 반환되며 이 과정에서 필드가 초기화된다.

  3. 동일한 초기값 문제: 클래스에서 필드를 선언하면서 바로 초기화하면, 모든 객체가 동일한 값을 가지게 된다.

  4. 기본값 초기화 문제: 반대로, 초기화를 하지 않으면 모든 필드가 기본값으로 설정되어, 객체 생성 후에 필드 값을 변경해야 한다.

    Dog d = new Dog();
    d.name = 'dog name';
    d.age = 13;
    // ...

    객체를 생성하는 시점부터 필드를 다양하게 초기화하도록 생성자를 제공한 것이다.

생성자의 특징

  • 생성자 메서드의 이름은 클래스 이름과 같다.
  • 접근 제한자가 public이어야만 호출될 수 있다.
  • 리턴 값을 가지지 않지만 void를 명시하지 않는다.
  • 모든 클래스는 생성자를 하나 이상 반드시 가진다.
    • 클래스에 선언하지 않을 시 컴파일러가 자동으로 디폴트 생성자를 추가한다.
    • 클래스에 다른 생성자가 하나라도 있다면 디폴트 생성자는 자동으로 추가되지 않는다.
  • 생성자도 오버라이드가 가능하다.

default 생성자

public class Car{
    public Car(){
        // 컴파일러에 의해서 생성된 디폴트 생성자는 내용 없음
    }
    private String name;
    private int price;
}
  • 매개변수가 없는 생성자
    • 클래스에 선언하지 않을 시 컴파일러가 자동으로 디폴트 생성자를 추가한다.
    • 클래스에 다른 생성자가 하나라도 있다면 디폴트 생성자는 자동으로 추가되지 않는다.
  • 내용이 없을 경우, 각 필드는 기본값으로 초기화된다.

매개변수가 있는 생성자

public class Car{
    public Car(String name, int price){
        this.name = name;
        this.price = price;
    }
    private String name;
    private int price;
}

생성자에서 다른 생성자 호출

public class Car{
    public Car(){
        this("car name", 20000);
    }
    public Car(String name, int price){
        this.name = name;
        this.price = price;
    }
    private String name;
    private int price;
}
  • this 키워드 사용

생성자를 이용한 인스턴스 복사

class Car{
    public Car(){
        this("car name", 20000);
    }
    public Car(String name, int price){
        this.name = name;
        this.price = price;
    }
    public Car(Car c){
        name = c.name;
        price = c.price;
        // 또는 this(c.name, c.price);
    }
    private String name;
    private int price;
}
  • 참고: this 키워드의 사용은 필수적이지 않으며, 주로 필드(클래스 변수)와 매개변수 이름이 같을 때 혼동을 방지하기 위해 사용.

this

자신을 가리키는 객체 변수(참조 변수, 포인터 변수).
객체가 생성된 후, 자기 자신을 가리키는(자신의 주소를 참조하는) 레퍼런스 변수인 this가 생성된다.

0개의 댓글