(공감과 댓글 하나는 글쓴이에게 큰 힘이 됩니다.)
생성자(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에 해당하는 생성자 실행
'Java' 카테고리의 다른 글
자바(Java) this 예약어 (0) | 2020.07.03 |
---|---|
자바(Java) 접근 제어자 (0) | 2020.06.30 |
자바(Java) 클래스(Class)와 인스턴스(Instance) (0) | 2020.06.30 |
자바(Java) 객체 지향 프로그래밍(OOP) (0) | 2020.06.30 |
자바(Java) break, continue문 (0) | 2020.06.26 |