JAVA/기초공부

[JAVA] 생성자와 생성자 중복

SoU330 2024. 9. 28. 02:32


생성자란?

: 객체가 생성될 때 호출되는 특별한 메서드

 

 

 

 

자바에서 생성자를 사용하는 이유?

객체가 생성될 때 필요한 초기화 작업을 수행하고 특정 상태로 객체를 설정하기 위해서

예 ) 멤버변수로 이름, 학번, 학과를 가진 객체를 만든다고 했을 때

- 생성자 없이 만들경우

class MyInfo_01 { 
    public String name;
    public int number;
    public String dept;
}

public class ConstructorTest_01 {
    public static void main(String[] args) {
        // MyInfo_01 클래스 형인 객체 my 생성
        MyInfo_01 my = new MyInfo_01();

        // 생성된 객체에 초기값 부여하는 방법 1
        my.name = "소유진";
        my.number = 20003324;
        my.dept = "소프트웨어학과";
    }
}

- 생성자를 사용해서 초기화하는 경우

class MyInfo_02 {
    public String name;
    public int number;
    public String dept;

    // 생성자 정의
    public MyInfo_02(String s, int i, String d) {
        name = s;
        number = i;
        dept = d;
    }
}

public class ConstructorTest_02 {
    public static void main(String[] args) { // 메인 메서드
        // MyInfo_02 클래스형인 객체를 생성하면서 값을 같이 전달
        MyInfo_02 my = new MyInfo_02("소유진",20003324,"소프트웨어학과");
    }
}

생성자를 사용하면 객체가 미완성된 상태로 생성되는 문제를 방지하고 안전하게 초기화할 수 있다.

 

 

 

 

 

 

 

생성자 특징

  • 생성자는 클래스 이름과 동일한 이름을 가진다.
  • 생성자는 반환값이 없으며 반환 타입도 명시하지 않는다.
  • 객체가 생성될 때 new 키워드에 의해 자동으로 호출된다.
  • 매개변수를 받아 객체의 초기값을 설정할 수 있다.
  • 생성자를 명시하지 않으면 컴파일러가 자동으로 기본 생성자를 제공한다. (생성자를 정의하면 기본 생성자가 자동으로 생성되지 않는다.)
  • 하나의 클래스에 여러 개의 생성자를 정의할 수 있다. (생성자 오버로딩)

 

 

 

 

 

생성자 중복(오버로딩)

: 하나의 클래스 안에서 여러 개의 생성자를 정의하는 것

같은 이름의 생성자를 서로 다른 매개변수 목록으로 여러 번 정의하는 것이다.

class MyInfo_04 {
    public String name;
    public int age;
    public String dept;
    public int degree;

    // 생성자 중복
    public MyInfo_04() {
        name = "윤아";
        age = 35;
        dept = "소녀시대";
        degree = 3;
    }

    public MyInfo_04(int age, String dept, int degree) {
        this.name = "유리";
        this.age = age;
        this.dept = dept;
        this.degree = degree;
    }

    public MyInfo_04(String name, int age, String dept, int degree) {
        this.name = name;
        this.age = age;
        this.dept = dept;
        this.degree = degree;
    }
}

public class ConstOverLoadingTest_01 {
    public static void main(String[] args) {
        // 생성자만 호출하는경우
        MyInfo_04 myInfo = new MyInfo_04();

        // 생성자를 호출하면서 인수 3개 넘기기
        MyInfo_04 myInfo3 = new MyInfo_04(25,"안녕",4);

        // 4개 넘기기
        MyInfo_04 myInfo4 = new MyInfo_04("효연", 36, "댄스",4);
    }
}

 

 

 

생성자 오버로딩의 장점

  • 생성자 오버로딩을 통해 다양한 방법으로 객체를 유연하게 생성할 수 있다.
  • 필요에 따라 값을 덜 전달하거나 더 전달할 수 있어서 객체를 초기화 하는 방법이 다양해진다.
  • 필요한 정보만으로 객체를 생성할 수 있으며 필수 값과 선택적 값을 구분하여 더 안정적인 객체 생성을 보장할 수 있다.