어제 오늘 내일

[Java] 생성자 오버로딩 (Constructor Overloading) 본문

IT/Java

[Java] 생성자 오버로딩 (Constructor Overloading)

hi.anna 2025. 12. 16. 07:11

 

Java에서 생성자는 객체가 만들어질 때 초기화 작업을 수행하는 특별한 메서드입니다. 그리고 하나의 클래스 안에 여러 형태의 생성자를 정의하는 것생성자 오버로딩(Constructor Overloading)이라고 합니다. 생성자 오버로딩은 객체 생성 방식에 유연성을 제공하며, 클래스 사용성을 높여주는 중요한 문법 요소입니다.

 

1. 생성자 오버로딩이란?

생성자 오버로딩은 매개변수의 개수나 타입이 다른 생성자를 여러 개 정의하는 것을 의미합니다.
이렇게 하면 같은 클래스라도 다양한 방식으로 객체를 만들 수 있습니다.

예:

Person p1 = new Person();
Person p2 = new Person("Tom");
Person p3 = new Person("Tom", 20);

 

2. 기본 예제

다음은 생성자를 세 가지 형태로 정의한 클래스 예제입니다.

public class Person {
    String name;
    int age;

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

    // 이름만 받는 생성자
    public Person(String name) {
        this.name = name;
        this.age = 0;
    }

    // 이름과 나이를 모두 받는 생성자
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

설명

  • 매개변수의 조합이 다르기 때문에 모두 다른 생성자로 인식됨
  • 상황에 따라 필요한 데이터만 전달하여 객체를 생성할 수 있음

 

3. 생성자 오버로딩의 장점

  • 객체 초기화 방식 선택의 폭이 넓어짐
  • 필수 값만 전달하도록 유도할 수 있음
  • 클래스 사용성이 향상됨

예를 들어 사용자가 이름만 알고 있거나, 이름과 나이를 모두 알고 있는 등 상황이 다를 때 유용합니다.

 

4. this()를 활용한 코드 중복 제거

오버로딩된 생성자끼리 서로 호출할 수 있으며, 이를 통해 초기화 코드를 한 곳에 모아둘 수 있습니다.

public class Person {
    String name;
    int age;

    public Person() {
        this("Unknown", 0); // 가장 상세한 생성자 호출
    }

    public Person(String name) {
        this(name, 0);      // 나이를 기본값으로 설정
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

설명

  • 코드 중복이 제거되어 유지보수성이 높아짐
  • 생성자 간 호출은 반드시 생성자 첫 줄에서 이루어져야 함

 

5. 정리

생성자 오버로딩은 클래스가 다양한 초기화 방식으로 사용될 수 있도록 도와줍니다.
매개변수를 조합하여 여러 생성자를 만들면 객체 생성의 편의성이 높아지고 가독성도 좋아집니다.
Java에서 클래스 설계를 더 유연하게 만들고 싶다면 꼭 알고 있어야 하는 문법입니다.

 

반응형
Comments