코딜기

[Java] 생성자(Constructor) 본문

Language/Java

[Java] 생성자(Constructor)

코딜기 2024. 8. 26. 16:41
반응형

생성자(Constructor)란?

  • 자바에서 객체를 생성할 때 호출하는 것이 생성자입니다.
  • 한마디로 생성자는 객체를 생성하는 역할을 합니다.

생성자의 특징

  • 생성자의 이름은 클래스의 이름과 대/소문자까지 완벽하게 동일해야 합니다.
  • 객체를 생성할 때 반드시 호출해야 합니다.
  • 일종의 메서드지만, 리턴 타입이 없고 리턴값은 주소값으로 고정되어 있습니다.
  • 생성자를 하나도 선언하지 않으면, JVM이 매개변수가 없고, 내용이 없는 가장 기본 형태의 생성자를 하나 생성해 주기 때문에 생성자 선언 없이도 객체 생성은 가능합니다.
  • 객체를 생성하는 기능뿐만 아니라, 객체 생성과 동시에 해야 할 일 (필드 초기화) 등을 진행할 수 있습니다.
  • 생성자는 오버로딩(Overloading)이 가능합니다.

생성자 사용

  • 펜 객체를 만드는 클래스를 정의하고, 속성을 선언한 후, 객체 생성과 초기화를 한 번에 처리할 수 있도록 생성자를 선언합니다.
  • 만약 인자를 받는 생성자를 선언하면 기본 생성자는 자동으로 제공되지 않으므로, 기본 생성자가 필요하다면 직접 선언해야 합니다. 
    • 기본 생성자가 없이 매개값을 받는 생성자만 선언한 경우, 그 생성자를 통해서만 객체를 생성할 수 있으며, 기본 생성자를 통해 객체를 생성할 수는 없습니다.
    • JVM이 기본 생성자를 자동으로 추가해 주는 경우는 클래스에 생성자가 전혀 선언되어 있지 않은 경우에 한합니다.
    • 따라서 기본 생성자가 필요한 경우에는 명시적으로 선언하는 것이 좋습니다.
public class Pen {
    String color;
    int price;
    int productId;
    
    // 생성자를 선언하지 않으면 가장 기본 형태의 생성자를 하나 만들어 줍니다.
    // 이게 가장 기본 형태의 생성자입니다.
    // 클래스의 이름과 동일하고, 리턴 타입이 존재하지 않습니다.
    Pen() {
    }

    // 생성자의 중복 선언(overloading)
    // 매개변수의 개수, 타입, 전달 순서를 다르게 하면 중복해서 선언이 가능합니다.
    Pen(String color, int price, int productId) {
        this.color = color;
        this.price = price;
        this.productId = productId;
    }
}
  • 아래와 같이 생성자를 호출하는 동시에 객체를 생성할 수 있습니다.
  • 미리 만들어져 있는 객체를 메서드로 받는 등 특별한 상황이 아니라면 대부분은 생성자를 호출함으로써 객체를 생성합니다.
public class Main {
    public static void main(String[] args) {
        // 우리가 평소에 객체 생성하는 방식이 바로 기본 생성자를 부르는 코드
        // 매개값을 전달하지 않으면 기본 생성자를 호출합니다.
        Pen redPen = new Pen();
        redPen.color = "빨간색";
        redPen.price = 1000;
        redPen.productId = 1;

        // 매개값을 받는 또 다른 생성자를 호출하는 코드
        // 값을 전달하면, 생성자가 인수를 받아서 필드 초기화
        // 매개변수는 순서, 타입, 갯수를 호출하고자 하는 생성자 형식에 맞게 작성해야 합니다.
        Pen bluePen = new Pen("파란색", 1500, 2);
    }
}
반응형
Comments