본문 바로가기

자바/자바 개념

[Java] 생성자, 디폴트 생성자, 매개변수 생성자, 생성자 오버로딩 / 2021.07.26

1. 생성자란?
클래스의 변수들은 메서드에 의해 값이 변경될 수 도 있지만, 생성자를 사용하여 초기화시켜줄 수도 있다.
생성자는 인스턴스를 만들고, 인스턴스의 변수들을 초기화시켜주는 역할을 한다.

2. 디폴트 생성자
생성자를 정의하지 않았을 때 자바 컴파일러에서 자동으로 만들어주는 생성자를 디폴트 생성 자라 고한다.
디폴트 생성자는 매개변수가 없고 코드도 없다.

Person.java :

1
2
3
4
5
6
public class Person {
    String name;
    int age;
    double height; 
}
 
cs

 

PersonTest.java :

1
2
3
4
5
public class PersonTest {
    public static void main(String[] args) {
        Person personKang = new Person();
    }
}
cs

 

위와 같이 Person클래스와 PersonTest클래스를 각각 만들어준다.

PersonTest의 "Person personLee = new Person();" 에서 "Person()"부분이 디폴트 생성자를 나타낸다.

 

3. 매개변수가 있는 생성자

생성자는 주로 멤버 변수에 대한 값들을 매개변수로 받아서 인스턴스가 새로 생성될 때 멤버 변수를 초기화하는 역할을 한다.

생성자를 하나라도 정의하면 디폴트 생성자는 사용할 수 없다. 디폴트 생성자를 사용하고 싶다면 직접 추가해 주어야 한다.

 

Person.java :

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Person {
    String name;
    int age;
    double height; 
    
    // 디폴트 생성자 직접 추가
    public Person() {
    
    }
    
    // 매개변수로 이름, 나이, 키를 입력받아서 
    // Person클래스를 생성하는 생성자
    public Person(String name, int age, double height) {
        this.name = name;
        this.age = age;
        this.height = height;
    }
}
cs

 

PersonTest.java :

1
2
3
4
5
6
7
8
9
public class PersonTest {
    public static void main(String[] args) {
        Person personKang = new Person();
        
        Person personKim = new Person("제니"26162);
        
    }
}
 
cs

 

그림으로 나타내면 다음과 같다.

 

디폴트 생성자
매개변수 생성자

 

4. 생성자 오버로딩

위의 예처럼 매개변수의 구성을 다르게 하면 같은 이름의 생성자를 여러 개 정의할 수 있는데, 이 개념을 

생성자 오버 로딩이라고 한다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public class Person {
    String name;
    int age;
    double height; 
    
    // 디폴트 생성자 직접 추가
    public Person() {
    
    }
    // 매개변수로 이름을 입력받는 생성자
    public Person(String name) {
        this.name = name;
    }
    
    // 매개변수로 이름 , 나이를 입력받는 생성자
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    
    // 매개변수로 이름, 나이, 키를 입력받아서 
    // Person클래스를 생성하는 생성자
    public Person(String name, int age, double height) {
        this.name = name;
        this.age = age;
        this.height = height;
    }
}
 
cs