생성자
정의
- 인스턴스가 생성될 때 호출되는 인스턴스 초기화 메소드
기본 생성자
- 클래스에 반드시 하나 이상의 생성자가 정의되어 있어야 한다
- 생성자를 하나도 선언하지 않으면 Java 컴파일러가 다음과 같이 기본 생성자를 자동으로 추가하여 컴파일한다
class 클래스명 {
클래스명() {
super();
}
}
매개변수가 있는 생성자
- 기본 생성자가 아닌 생성자를 선언할 수 있다
- 생성자를 선언하면 컴파일러가 기본 생성자를 자동으로 추가하지 않는다
생성자 호출
설명
- 서브 클래스는 반드시 슈퍼 클래스의 생성자를 호출해야 한다
- 모든 클래스는 Object 클래스를 상속받는다
- 상속 받는 슈퍼 클래스가 없다면 컴파일러가 자동으로 현재 클래스에 extends Object를 추가하여 컴파일한다
super()
- 슈퍼 클래스의 생성자를 호출하기 위해
super()
를 사용한다
super()
는 서브 클래스 생성자의 첫 번째 줄에 위치해야 한다
- 첫 번째 줄에 위치하므로, 슈퍼 클래스의 생성자가 먼저 실행된 후 서브 클래스의 생성자가 실행된다
- 생성자에
super()
를 명시하지 않으면 컴파일러가 추가하여 컴파일 한다
- 슈퍼 클래스에
기본 생성자
가 없고 매개변수가 있는 생성자
만 있다면 자동 생성된 super()
를 통해 기본 생성자를 호출할 수 없으므로 컴파일 에러가 발생한다
- 이런 경우는 서브 클래스 생성자에서 명시적으로 호출해야 한다
- 생성자를 전부 private으로 만들면 상속이 불가능해지는데, 이런 경우 클래스에 final을 붙여서 상속이 불가능한 클래스라는 것을 알리는 것이 좋다
this()
- 현재 클래스의 다른 생성자를 호출할 때는 클래스명 대신
this()
를 사용한다
this()
는 생성자의 첫 번째 줄에 위치해야 한다
- 생성자에서 초기화 작업 중간에 다른 생성자를 호출하면, 다른 생성자에서 초기화 작업으로 인해 그 전까지의 초기화 작업이 무의미해질 수 있기 때문