(공감과 댓글 하나는 글쓴이에게 큰 힘이 됩니다.)

 

생성자(Constructor)란 딱 한 번만 호출되어 멤버 변수의 초기화를 목적으로 사용되는 메소드이다. 생성자의 이름은 클래스 이름과 같고, 반환형이 없다. 또한 클래스에는 반드시 하나 이상의 생성자가 필요하다.

 

■ 디폴트 생성자

- 아무런 생성자도 만들지 않으면 컴파일러에서 컴파일 시 자동으로 생성자를 만들어주는데, 이를 디폴트 생성자라고 한다. 디폴트 생성자는 아무런 매개변수도 갖지 않고, 안에 어떠한 코드도 존재하지 않는다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Customer {
    String name;
    int money;
    
    //public Customer() {}
}
 
public class Main {
    public static void main(String[] args) {
        Customer c1 = new Customer(); // 디폴트 생성자를 통한 인스턴스 생성
        c1.name = "무민";
        c1.money = 2000;
    }
}
cs

Line 5 : 어떠한 생성자도 만들어주지 않으면, 디폴드 생성자가 컴파일 시 자동으로 만들어진다.

 

■ 생성자 만들기

- 인스턴스를 초기화하기 위해 사용자가 직접 생성자를 만들 수 있다. 사용자가 아무런 생성자도 만들지 않는 경우에 디폴트 생성자가 만들어졌지만, 사용자가 생성자를 만드는 순간 디폴트 생성자는 자동으로 생성되지 않는다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Customer {
    String name;
    int money;
    
    //public Customer() {}
    public Customer(String n, int m) {
        this.name = n;
        this.money = m;
    }
}
 
public class Main {
    public static void main(String[] args) {
        Customer c1 = new Customer("무민"2000);
        Customer c2 = new Customer(); // 에러 발생
    }
}
cs

Line 6 ~ 9 : name과 money를 초기화시켜주는 생성자

Line 14 : 사용자가 만든 생성자를 통한 인스턴스 생성

Line 15 : 생성자를 만든 경우 디폴트 생성자가 자동으로 생기지 않으므로 에러 발생

            (이 경우 Line 5의 주석을 해제하여 디폴트 생성자를 직접 만들어줘야 한다.)

 

■ 오버로딩(Overloading)

- 생성자처럼 동일한 이름의 메소드를 여러 개 생성하는 것을 오버로딩이라고 한다. 매개변수의 개수를 다르게 하거나, 매개변수의 타입을 다르게 하여 동일한 이름의 메소드를 여러 개 생성하여 사용할 수 있다. 호출 시 매개변수를 비교하여 매개변수와 일치하는 메소드가 호출된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Customer {
    String name;
    int money;
    
    public Customer() {
        System.out.println("constructor 1");
    }
    public Customer(String n) {
        System.out.println("constructor 2");
        this.name = n;
    }
    public Customer(String n, int m) {
        System.out.println("constructor 3");
        this.name = n;
        this.money = m;
    }
}
 
public class Main {
    public static void main(String[] args) {
        Customer c1 = new Customer("무민"); // constructor 2
    }
}
cs

Line 5 ~ 7 : 디폴트 생성자

Line 8 ~ 11 : name을 초기화 시키는 생성자

Line 12 ~ 16 : name, money를 초기화 시키는 생성자

Line 21 : 파라미터로 name만 전달하여 constructor 2에 해당하는 생성자 실행

+ Recent posts