1. 생성자(Constructor)
- 객체를 생성하는 역할을 하는 클래스의 구성 요소
- 객체 생성 시, new 키워드를 통해 생성자를 호출하여 인스턴스를 초기화하는데 사용하는 특수한 메서드
생성자의 조건
- 생성자의 이름은 반드시 클래스의 이름과 같아야 함
- 생성자는 리턴 타입이 없음, void 키워드를 사용하지 않음
- 클래스에는 반드시 생성자가 1개 이상 있어야 함
- 생성자 코드가 없는 경우, 컴파일러가 기본 생성자를 자동 생성함
- 생성자 코드가 있는 경우, 컴파일러가 기본 생성자를 자동 생성하지 않음
- 예시 :
public class Book {
String title;
int price;
public Book() { }
public Book(String title, int price) {
this.title = title;
this.price = price;
}
}
public class HelloWorld {
public static void main(String[] args) {
Book b1 = new Book();
Book b2 = new Book("국어책", 3000);
}
}
- 위 예시와 같이 생성자 오버로딩을 통해 하나의 클래스 안에 여러 개의 생성자를 작성할 수 있음
2. 생성자의 종류
기본 생성자(Default Constructor)
public Book() { }
- 매개변수가 없는 생성자를 의미
- 클래스 안에 생성자가 없는 경우, 자바 컴파일러가 기본 생성자를 자동으로 추가함
- 특정 생성자가 작성되어 있는 경우, 작성된 생성자를 기본으로 사용하여 자바 컴파일러가 기본 생성자를 자동으로 추가하지 않음
- 이러한 경우, 기본 생성자를 코딩해놓지 않았다면 에러가 발생함
매개변수가 있는 생성자
public Book(String title, int price) {
this.title = title;
this.price = price;
}
- 매개변수가 있는 생성자는 매개변수를 통해 호출해야 함
Book b2 = new Book("국어책", 3000);
- 호출 시 해당 값을 받아 인스턴스를 초기화 함
- 원하는 값으로 초기화 했기 때문에, 따로 필드 값을 초기화 하지 않아도 됨
3. this() 메서드
- 같은 클래스에서 생성자가 다른 생성자를 호출할 때 사용
- this()는 생성자 코드에서만 사용하는 메서드
- 주로 코드의 중복 제거를 위해 사용
- 예시 :
public class Book {
private String title;
private int price;
public Book(String title, int price) {
this.title = title;
this.price = price;
}
public Book(String title) {
this(title, 0);
}
}
- this() 메서드에 인수를 전달하면 생성자 중 메서드의 원형에 명시되는 매개변수 리스트를 갖는 생성자 메서드를 호출함
- title 정보만을 가지고 생성자를 호출하면
this(title, 0);를 통해 price를 0으로 초기화 후 Book(String title, int price) 메서드에 전달하여 title과 price 모두 초기화 가능하다는 부분이 장점
- 이때, 한 생성자가 다른 생성자를 호출할 때는 반드시 해당 생성자의 첫 줄에서만 호출할 수 있다는 점을 주의