[자바 무료 강의] 생성자 오버로딩 - 코드라떼
Lesson List button
코스자바로 배우는 프로그래밍
hamburger button
강의생성자 오버로딩최종수정일 2021-11-21
아이콘약 2분

생성자를 여러 개 만들면 다양한 방식으로 인스턴스를 생성할 수 있습니다. 이러한 것을 생성자 오버 로딩이라고 하는데요. 생성자 오버 로딩에 도 주의할 점이 있습니다. 강의에서 확인해보죠

추가 노트

목차


  1. 생성자 오버로딩

  2. 생성자 오버로딩 시 this(...)

  3. [실습해보기] 생성자 오버로딩 사용해보기

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

image

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

image

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

image

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


3. [실습해보기] 생성자 오버로딩 사용해보기


1. this() 사용해보기

case 1

코드 작성(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
도전자 질문
작성된 질문이 없습니다
이용약관|개인정보취급방침
알유티씨클래스|대표, 개인정보보호책임자 : 이병록
이메일 : cs@codelatte.io
사업자등록번호 : 824-06-01921
통신판매업신고 : 2021-성남분당C-0740
주소 : 경기도 성남시 분당구 대왕판교로645번길 12, 9층 24호
파일
파일파일
Root
파일

실습해보세요의 코드를 작성해보세요.

Output
root$
Lesson List button
코스자바로 배우는 프로그래밍
hamburger button
강의생성자 오버로딩최종수정일 2021-11-21
아이콘약 2분

생성자를 여러 개 만들면 다양한 방식으로 인스턴스를 생성할 수 있습니다. 이러한 것을 생성자 오버 로딩이라고 하는데요. 생성자 오버 로딩에 도 주의할 점이 있습니다. 강의에서 확인해보죠

추가 노트

목차


  1. 생성자 오버로딩

  2. 생성자 오버로딩 시 this(...)

  3. [실습해보기] 생성자 오버로딩 사용해보기

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

image

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

image

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

image

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


3. [실습해보기] 생성자 오버로딩 사용해보기


1. this() 사용해보기

case 1

코드 작성(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
도전자 질문
작성된 질문이 없습니다
이용약관|개인정보취급방침
알유티씨클래스|대표, 개인정보보호책임자 : 이병록
이메일 : cs@codelatte.io|운영시간 09:00 - 18:00(평일)
사업자등록번호 : 824-06-01921|통신판매업신고 : 2021-성남분당C-0740
주소 : 경기도 성남시 분당구 대왕판교로645번길 12, 9층 24호(경기창조혁신센터)
파일
파일파일
Root
파일

실습해보세요의 코드를 작성해보세요.

Output
root$