JAVA

[JAVA]생성자 오버로딩

당고개 2023. 9. 6. 18:01

1. 생성자 오버로딩

여러개의 생성자를 선언하는 것을 생성자 오버로딩이라고 합니다.

class Person {
    String name;
    int age;
    String gender;

    Person(String name) { 
        this.name = name;
    }

    Person(int age) {
        this.age = age;
    }

    Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}
Person person1 = new Person("이름", 1);
Person person2 = new Person("이름");
Person person3 = new Person(1);

다만 생성자를 오버로딩 할 때 주의할 점이 있습니다.
같은 자료형의 매개변수로 생성자를 선언하여 오버로딩 할 수 없습니다.

class Person {
    String name;
    int age;
    String gender;
 
    // 같은 자료형의 매개변수로 오버로딩 할 수 없다.
    Person(String name, int age) { 
        this.name = name;
        this.age = age; 
    }

    // 같은 자료형의 매개변수로 오버로딩 할 수 없다.
    Person(String gender, int age) { 
        this.gender = gender;
        this.age = age;
    }

}

 

Person person = new Person("a", 1);

이유눈 간단합니다. new Person("a");Person(String name, int age)을 호출해야 할 지 Person(String gender, int age)를 호출해야 할 지 알 수 없기 때문입니다. 인간도 알 수 없고 컴퓨터도 알 수 없습니다.

2. this(...)

this()는 클래스 내부에서 자기 자신의 생성자를 호출하는 방식으로 생성자 내부에서만 사용할 수 있는 명령어입니다.

일반적으론 이렇게 생성자를 선언하여 인스턴스를 생성할 수 있는데요. 코드 중복을 줄이기 위해 이렇게 사용할 수도 있습니다.

인스턴스 생성 명령어가 실행되면 생성자 내부에서 오버로딩된 생성자를 호출하여 데이터를 초기화 할 수 있습니다. 이러한 방식은 this() 명령어에 넣는 인자에 의해서 어떤 생성자를 호출할지 정해집니다.

this(name)이란 것은 String 자료형 매개변수인 생성자를 호출하는 명령어이고, this(name, age)String, int 자료형 매개변수인 생성자를 호출하는 명령어입니다.

3. 생성자 오버로딩 사용해보기

1. this() 사용해보기

코드 작성(Person.java)

class Person {
    String name;
    int age;
    String gender;

    Person(String name) {
        this.name = name;
    }

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

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

코드 작성(Main.java)

public class Main {
    public static void main(String[] args) {
        Person person1 = new Person("김철수", 20, "male");
        System.out.println(person1.name);
        System.out.println(person1.age);
        System.out.println(person1.gender);

        Person person2 = new Person("김안나", 25);
        System.out.println(person2.name);
        System.out.println(person2.age);
        System.out.println(person2.gender);
    }
}

출력

김철수
20
male
김안나
25
null

 

 

 

출처 : https://www.codelatte.io/courses/java_programming_basic/VV4M29BYKJIAYL18

'JAVA' 카테고리의 다른 글

[JAVA]메서드 오버로딩  (0) 2023.09.08
[JAVA]메서드  (0) 2023.09.07
[JAVA]생성자, this  (0) 2023.09.05
[JAVA]멤버 변수  (0) 2023.09.05
[JAVA]클래스  (0) 2023.08.30