Language/Java

생성자(Constructor), this(), super()

snowkit 2022. 7. 17. 23:07

생성자

정의

  • 인스턴스가 생성될 때 호출되는 인스턴스 초기화 메소드

기본 생성자

  • 클래스에 반드시 하나 이상의 생성자가 정의되어 있어야 한다
  • 생성자를 하나도 선언하지 않으면 Java 컴파일러가 다음과 같이 기본 생성자를 자동으로 추가하여 컴파일한다
class 클래스명 {

    클래스명() {
        super();
    }
}

매개변수가 있는 생성자

  • 기본 생성자가 아닌 생성자를 선언할 수 있다
  • 생성자를 선언하면 컴파일러가 기본 생성자를 자동으로 추가하지 않는다

생성자 호출

설명

  • 서브 클래스는 반드시 슈퍼 클래스의 생성자를 호출해야 한다
  • 모든 클래스는 Object 클래스를 상속받는다
    • 상속 받는 슈퍼 클래스가 없다면 컴파일러가 자동으로 현재 클래스에 extends Object를 추가하여 컴파일한다

super()

  • 슈퍼 클래스의 생성자를 호출하기 위해 super()를 사용한다
    • super()는 서브 클래스 생성자의 첫 번째 줄에 위치해야 한다
    • 첫 번째 줄에 위치하므로, 슈퍼 클래스의 생성자가 먼저 실행된 후 서브 클래스의 생성자가 실행된다
  • 생성자에 super()를 명시하지 않으면 컴파일러가 추가하여 컴파일 한다
  • 슈퍼 클래스에 기본 생성자가 없고 매개변수가 있는 생성자만 있다면 자동 생성된 super()를 통해 기본 생성자를 호출할 수 없으므로 컴파일 에러가 발생한다
    • 이런 경우는 서브 클래스 생성자에서 명시적으로 호출해야 한다
  • 생성자를 전부 private으로 만들면 상속이 불가능해지는데, 이런 경우 클래스에 final을 붙여서 상속이 불가능한 클래스라는 것을 알리는 것이 좋다

this()

  • 현재 클래스의 다른 생성자를 호출할 때는 클래스명 대신 this()를 사용한다
    • this()는 생성자의 첫 번째 줄에 위치해야 한다
    • 생성자에서 초기화 작업 중간에 다른 생성자를 호출하면, 다른 생성자에서 초기화 작업으로 인해 그 전까지의 초기화 작업이 무의미해질 수 있기 때문

'Language > Java' 카테고리의 다른 글

abstract  (0) 2022.07.17
final  (0) 2022.07.17
변수, 메소드, this, super  (0) 2022.07.17
오버라이딩(Overriding), 오버로딩(Overloading)  (0) 2022.07.17
초기화 블록(Initialization block)  (0) 2022.07.17