생성자의 장점

Xtraa·2024년 12월 17일

Java 기본 개념

목록 보기
3/7

1. 생성자의 등장 배경

문제점 (생성자 등장 전)

  • 객체를 생성한 후 초기 작업(데이터 설정)을 위해 별도의 메서드를 호출해야 했다.
  • 초기화 메서드를 호출하지 않을 경우 객체가 유효하지 않은 상태로 존재할 수 있다.

예제: 생성자 등장 전

// 객체 생성 후 초기화 메서드 호출
MemberInit member = new MemberInit();
member.initMember("user1", 15, 90);
  • 문제: initMember()를 호출하지 않아도 프로그램은 실행되지만, 객체가 필수 데이터를 가지지 않는 유령 객체가 될 수 있음.

2. 생성자의 장점

중복 호출 제거

  • 생성자는 객체 생성 시 자동 호출되므로 초기화 메서드를 별도로 호출할 필요가 없다.
  • 객체 생성과 동시에 초기화 작업이 이루어지므로 중복 작업이 제거되고 코드가 간결해진다.

예제: 생성자 사용

// 생성자를 통해 객체 생성과 초기화를 동시에 처리
MemberConstruct member = new MemberConstruct("user1", 15, 90);

필수 값 입력 보장

  • 생성자를 명시적으로 정의하면 객체를 생성할 때 반드시 생성자를 호출해야 한다.
  • 필수값을 입력하지 않으면 컴파일 오류가 발생하므로 객체의 유효한 상태를 보장할 수 있다.

예제: 생성자 호출 필수

public class MemberConstruct {
    String name;
    int age;
    int grade;

    // 명시적 생성자
    public MemberConstruct(String name, int age, int grade) {
        this.name = name;
        this.age = age;
        this.grade = grade;
    }
}

// 컴파일 오류 발생 (기본 생성자 없음)
MemberConstruct member = new MemberConstruct(); // 오류

오류 메시지

no suitable constructor found for MemberConstruct(no arguments)
  • 결과: 개발자는 필수값이 있는 생성자를 호출해야 객체를 생성할 수 있다.

3. 생성자 오버로딩

정의

  • 생성자 오버로딩을 통해 여러 개의 생성자를 정의하여 다양한 초기화 방식을 제공할 수 있다.
  • this() 키워드를 사용하면 중복 코드 작성을 방지할 수 있다.

예제: 생성자 오버로딩

public class MemberConstruct {
    String name;
    int age;
    int grade;

    // 생성자 1: 모든 값 초기화
    public MemberConstruct(String name, int age, int grade) {
        this.name = name;
        this.age = age;
        this.grade = grade;
    }

    // 생성자 2: 기본 값 설정
    public MemberConstruct(String name) {
        this(name, 0, 0); // 생성자 1 호출
    }
}

MemberConstruct member1 = new MemberConstruct("user1", 15, 90);
MemberConstruct member2 = new MemberConstruct("user2");
  • 결과:
    • 첫 번째 생성자는 모든 값을 초기화.
    • 두 번째 생성자는 name만 설정하고 나머지는 기본값으로 초기화.

4. 생성자와 기본 생성자의 관계

기본 생성자

  • 개발자가 생성자를 하나도 정의하지 않으면 컴파일러가 자동으로 기본 생성자(파라미터 없는 생성자)를 추가한다.

명시적 생성자

  • 개발자가 생성자를 명시적으로 정의하면, 컴파일러는 기본 생성자를 추가하지 않는다.
  • 이 경우 객체를 생성할 때 명시된 생성자만 호출할 수 있다.

예제

public class MemberConstruct {
    String name;

    // 명시적 생성자
    public MemberConstruct(String name) {
        this.name = name;
    }
}

// 기본 생성자 호출 시 컴파일 오류
MemberConstruct member = new MemberConstruct(); // 오류 발생

요약

  1. 중복 호출 제거:
    • 생성자는 객체 생성과 동시에 초기화 작업을 처리하므로 불필요한 메서드 호출을 제거한다.
  2. 필수 값 입력 보장:
    • 명시적 생성자를 정의하면 필수값 입력이 강제되며, 컴파일 시점에 오류를 확인할 수 있다.
  3. 생성자 오버로딩:
    • 여러 생성자를 제공하여 초기화 방식을 다양하게 처리할 수 있으며, this()를 사용해 중복 코드를 방지한다.
  4. 기본 생성자와 명시적 생성자:
    • 생성자를 명시적으로 정의하면 기본 생성자는 자동으로 추가되지 않는다.

profile
https://xtraa.notion.site/Xtraa-ed48ac432d354d01b5bf5b0da5ec94a9?pvs=4

0개의 댓글