기본 생성자(No-arg Constructor)란?
매개변수가 없는 생성자(no-arg constructor)는 어떤 인자도 받지 않고, 클래스의 변수들을 각 타입별 기본값으로 초기화합니다. 즉, 객체 타입은 null, float와 double은 0.0, boolean은 false, byte, short, int, long은 0으로 초기화됩니다.
생성자는 개발자가 명시적으로 호출할 필요가 없습니다. 객체가 인스턴스화되는 순간 자동으로 호출됩니다. 또한 클래스에 생성자를 하나도 정의하지 않으면, 컴파일러가 자동으로 기본 생성자를 만들어 줍니다.
생성자 정의 시 기억해야 할 규칙
생성자를 정의할 때는 다음 사항을 반드시 유의해야 합니다.
- 생성자에는 반환 타입(return type)이 없습니다.
- 생성자의 이름은 클래스 이름과 동일해야 합니다.
- 생성자는 abstract, final, static, synchronized로 선언할 수 없습니다.
- 생성자에는 public, protected, private 접근 제어자를 사용할 수 있습니다.
예제 1: 암시적 기본 생성자
아래 예제에서는 생성자를 직접 정의하지 않았지만, 컴파일러가 자동으로 기본 생성자를 제공하므로 new NumberValue()로 객체를 생성할 수 있습니다. 변수 num은 별도 초기화 없이 int의 기본값인 0을 갖게 됩니다.
class NumberValue {
private int num;
public void display() {
System.out.println("The number is: " + num);
}
}
public class Demo {
public static void main(String[] args) {
NumberValue obj = new NumberValue();
obj.display();
}
}실행 결과
The number is: 0
예제 2: 직접 정의한 기본 생성자
이번에는 기본 생성자를 직접 정의하여 필드 값을 초기화하는 예제입니다. final 필드도 생성자 안에서 초기화할 수 있습니다.
public class Student {
public final String name;
public final int age;
public Student(){
this.name = "Raju";
this.age = 20;
}
public void display(){
System.out.println("Name of the Student: "+this.name );
System.out.println("Age of the Student: "+this.age );
}
public static void main(String args[]) {
new Student().display();
}
}실행 결과
Name of the Student: Raju Age of the Student: 20