Categories: Java

Java 자바 생성자 (Constructor) 특징과 사용법

생성자란?

자바에서 생성자(Constructor)는 객체를 초기화하고 인스턴스를 생성하는 데 사용되는 특별한 종류의 메서드입니다. 생성자는 클래스의 이름과 동일하며, 객체를 생성할 때 new 키워드와 함께 호출됩니다. 생성자는 주로 객체의 초기 상태를 설정하거나 필드를 초기화하는 데 사용됩니다.

생성자의 목적

생성자의 주요 목적은 객체를 초기화하고 필요한 초기 상태로 설정하는 것입니다. 이것은 객체가 생성될 때 한 번 호출되며, 클래스의 인스턴스가 생성될 때 필요한 초기화 작업을 수행합니다. 여러 가지 목적이 있지만 주로 다음과 같은 이유로 사용됩니다.

  1. 인스턴스 변수 초기화: 생성자는 주로 클래스의 인스턴스 변수를 초기화하는 데 사용됩니다. 객체가 사용될 때 필요한 속성이나 상태를 초기값으로 설정하여 객체가 올바르게 동작하도록 보장합니다.
  2. 매개변수 전달 및 처리: 매개변수를 받는 생성자를 사용하여 객체를 생성할 때 외부에서 전달된 값들을 사용하여 초기화를 수행할 수 있습니다. 이를 통해 객체의 속성을 외부에서 지정할 수 있습니다.
  3. 상속 및 다형성 지원: 생성자는 상속과 다형성을 지원합니다. 부모 클래스의 생성자를 호출하여 부모 클래스의 초기화를 수행하거나 서브클래스에서 재정의된 생성자를 호출하여 특정 동작을 추가할 수 있습니다.
  4. 클래스 유효성 검사: 생성자는 객체가 생성될 때 입력된 값들의 유효성을 검사하고, 필요한 경우 예외를 던져서 객체의 생성을 중단시킬 수 있습니다.

요약하면, 생성자는 객체를 초기화하여 올바른 상태로 설정하고, 필요한 초기 작업을 수행하여 객체의 안정성과 일관성을 유지하는 데 중요한 역할을 합니다.

생성자의 특징

  1. 클래스 이름과 동일: 생성자의 이름은 해당 클래스의 이름과 동일합니다. 이로 인해 생성자를 식별할 수 있습니다.
  2. 리턴 타입이 없음: 생성자는 값을 반환하지 않으며, 리턴 타입이 없는(void가 아닌) 특징을 가집니다.
  3. 객체 초기화: 주된 목적은 객체를 초기화하는 것이며, 객체가 생성될 때 단 한 번 호출됩니다. 따라서 생성자를 통해 객체의 초기 상태를 설정할 수 있습니다.
  4. 오버로딩 가능: 클래스 내에 여러 개의 생성자를 정의할 수 있습니다. 이를 통해 다양한 매개변수를 받아 객체를 다양한 방식으로 초기화할 수 있습니다.
  5. 자동 호출: 객체를 생성할 때 new 키워드와 함께 생성자가 자동으로 호출됩니다. 생성자 호출 후에는 객체가 메모리에 할당되고, 초기화 작업이 수행됩니다.
  6. 상속: 부모 클래스의 생성자는 하위 클래스에서 자동으로 호출되며, 하위 클래스에서 명시적으로 부모 클래스의 생성자를 호출하는 경우에 사용됩니다.
  7. 기본 생성자 자동 생성: 클래스에 명시적으로 생성자를 정의하지 않으면 자바 컴파일러가 자동으로 기본 생성자를 생성합니다.
  8. 인스턴스 변수 초기화: 생성자는 주로 인스턴스 변수를 초기화하는 데 사용되며, 객체가 유효한 상태로 시작할 수 있도록 도와줍니다.

생성자의 사용법

생성자의 선언

클래스 내부에 생성자를 선언하는 것은 다음과 같습니다. 생성자의 이름은 클래스의 이름과 동일하게 설정되어야 합니다. (생성자는 반환타입이 없습니다.)

Java
public class MyClass {
    // 기본 생성자
    public MyClass() {
        // 생성자의 내용
    }
}
Java

디폴트 생성자

매개변수를 가지지 않는 생성자를 명시적으로 선언하지 않고도 자바 컴파일러가 자동으로 생성하는 생성자입니다. 클래스에 생성자가 하나라도 명시적으로 정의되어 있으면 디폴트 생성자는 자동으로 생성되지 않습니다.

Java
public class MyClass {
    // 매개변수가 없는 생성자를 명시적으로 선언하지 않아도
    // 자바 컴파일러가 자동으로 생성함
}
Java

매개변수가 있는 생성자

생성자는 매개변수를 가질 수 있으며, 매개변수를 통해 외부에서 전달된 값을 활용하여 객체를 초기화할 수 있습니다.

Java
public class Person {
    private String name;
    private int age;

    // 매개변수가 있는 생성자
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}
Java

다른 생성자 호출

같은 클래스 내에서 다른 생성자를 호출하여 코드의 중복을 방지하고 재사용성을 높일 수 있습니다.

Java
public class MyClass {
    private int value;

    // 기본 생성자
    public MyClass() {
        this(0); // 다른 생성자 호출
    }

    // 매개변수가 있는 생성자
    public MyClass(int value) {
        this.value = value;
    }
}
Java

생성자의 오버로딩 (Overloading)

자바에서 생성자의 오버로딩(Overloading)은 같은 이름의 생성자를 여러 개 정의하는 것을 의미합니다. 오버로딩된 생성자들은 서로 다른 매개변수 목록을 가져야 합니다. 다양한 생성자를 제공함으로써 객체를 다양한 방식으로 초기화할 수 있습니다.

매개변수의 개수나 타입이 다른 생성자 정의

생성자 오버로딩은 매개변수의 개수나 타입을 다르게 하여 같은 이름의 생성자를 여러 개 정의하는 것입니다. 예를 들어, 클래스에는 여러 생성자가 있을 수 있습니다.

Java
public class MyClass {
    private int value;

    // 생성자 오버로딩
    public MyClass() {
        // 매개변수 없는 생성자
        this.value = 0;
    }

    // 매개변수가 있는 생성자
    public MyClass(int value) {
        // 매개변수가 있는 생성자
        this.value = value;
    }

    // 다른 매개변수 타입을 가진 생성자
    public MyClass(String strValue) {
        // 다른 매개변수 타입을 가진 생성자
        this.value = Integer.parseInt(strValue);
    }
}
Java

매개변수의 개수와 타입에 따라 호출되는 생성자가 결정됨

생성자를 호출할 때 전달하는 매개변수의 개수와 타입에 따라 어떤 생성자가 호출될지 자동으로 결정됩니다. 컴파일러는 호출될 생성자를 선택하기 위해 전달된 매개변수의 타입 및 개수와 일치하는 생성자를 찾습니다.

Java
// 생성자 호출
MyClass obj1 = new MyClass();          // 매개변수 없는 생성자 호출
MyClass obj2 = new MyClass(42);        // 매개변수가 있는 생성자 호출
MyClass obj3 = new MyClass("123");     // 다른 매개변수 타입을 가진 생성자 호출
Java

✔️생성자 오버로딩은 다양한 상황에서 객체를 생성하고 초기화할 수 있도록 하여 코드의 유연성을 제공하며, 다양한 요구사항에 대응할 수 있도록 도와줍니다.

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

this를 사용하여 같은 클래스의 다른 생성자를 호출하는 것을 생성자 체이닝(Constructor Chaining)이라고 합니다. 이를 통해 중복 코드를 최소화하고 재사용성을 높일 수 있습니다.

💡this 를 사용해 다른 생성자를 호출할 때는 첫줄에서만 호출할 수 있습니다.

Java
public class Product {
    private String name;
    private double price;
    private int quantity;

    // 기본 생성자
    public Product() {
        this("Unknown", 0.0, 0); // 다른 생성자 호출
    }

    // 매개변수가 1개인 생성자
    public Product(String name) {
        this(name, 0.0, 0); // 다른 생성자 호출
    }

    // 매개변수가 2개인 생성자
    public Product(String name, double price) {
        this(name, price, 0); // 다른 생성자 호출
    }

    // 매개변수가 3개인 생성자
    public Product(String name, double price, int quantity) {
        this.name = name;
        this.price = price;
        this.quantity = quantity;
    }

    // 상품 정보 출력 메서드
    public void displayProductInfo() {
        System.out.println("Product: " + name);
        System.out.println("Price: $" + price);
        System.out.println("Quantity: " + quantity);
    }

    public static void main(String[] args) {
        // 다양한 생성자 호출
        Product product1 = new Product(); // 매개변수가 없는 생성자 호출
        Product product2 = new Product("Laptop"); // 매개변수가 1개인 생성자 호출
        Product product3 = new Product("Smartphone", 799.99); // 매개변수가 2개인 생성자 호출
        Product product4 = new Product("Tablet", 299.99, 10); // 매개변수가 3개인 생성자 호출
        Product product5 = new Product("Camera", 2); // 다른 매개변수 타입을 가진 생성자 호출

        // 상품 정보 출력
        product1.displayProductInfo();
        System.out.println();
        product2.displayProductInfo();
        System.out.println();
        product3.displayProductInfo();
        System.out.println();
        product4.displayProductInfo();
        System.out.println();
        product5.displayProductInfo();
    }
}
//결과
Product: Unknown
Price: $0.0
Quantity: 0

Product: Laptop
Price: $0.0
Quantity: 0

Product: Smartphone
Price: $799.99
Quantity: 0

Product: Tablet
Price: $299.99
Quantity: 10

Product: Camera
Price: $0.0
Quantity: 2
Java

✔️이 예제에서는 this 키워드를 사용하여 생성자에서 다른 생성자를 호출하였습니다. 각 생성자는 자신의 매개변수를 초기화한 후 다른 생성자를 호출하여 중복 코드를 피하고, 초기화 로직을 재사용합니다.

결론

자바의 생성자는 객체를 초기화하고 인스턴스를 생성하는 메서드로, 주로 객체의 초기 상태를 설정하거나 필드를 초기화하는 데 사용됩니다. 클래스 이름과 동일하며, 객체를 생성할 때 new 키워드와 함께 호출됩니다. 생성자의 주요 목적은 객체를 초기화하고 필요한 초기 상태로 설정하는 것이며, 주로 인스턴스 변수를 초기화하거나 매개변수를 전달하여 객체를 초기화하는 데 사용됩니다.

생성자는 리턴 타입이 없고, 클래스의 다양한 상황에 맞게 여러 개 정의할 수 있습니다. 생성자의 특징으로는 클래스 이름과 동일하며, 객체 초기화, 오버로딩 가능, 자동 호출, 상속 등이 있습니다.

적절한 생성자를 설계하여 객체를 효과적으로 초기화하고 다양한 상황에 대응하는 것이 중요합니다.

suover

Recent Posts

Java 자바 Enum 열거형 사용법

Enum이란? Enum은 "enumeration"의 줄임말로, 특정 값들의 집합을 정의할 수 있는 특별한 클래스입니다. 예를 들어, 요일,…

3주 ago

Java 자바 래퍼 클래스(Wrapper Class)란? 래퍼 클래스의 필요성

래퍼 클래스(Wrapper Class)란? 자바에서 래퍼 클래스는 기본 데이터 타입(Primitive Data Type)을 객체(Object)로 감싸는 클래스입니다. 자바의…

3주 ago

Java 자바 StringBuilder 개념 및 특징 주요 메소드

서론 Java에서 문자열을 다룰 때, 문자열의 변경이 빈번하게 발생하는 경우라면 StringBuilder 클래스를 사용하는 것이 매우…

4주 ago

웹 개발 FitOn 팀 프로젝트 회고

서론 현대인들은 점점 더 운동과 건강에 대한 관심을 가지고 있으며, 이를 체계적으로 관리하고 공유할 수…

1개월 ago

Java 자바 String 클래스 특징 및 메소드

String 클래스란? 자바에서 String 클래스는 가장 널리 사용되는 클래스 중 하나입니다. 문자열 시퀀스를 나타내며, 문자열을…

2개월 ago

Java 자바 불변 객체(Immutable Object) 개념 정리

불변 객체란? 불변 객체(Immutable Object)는 생성된 이후 그 상태를 변경할 수 없는 객체를 의미합니다. 불변…

2개월 ago