Java에서 생성자(Constructor)란 무엇일까?
생성자(constructor)는 메서드와 비슷한 형태를 가지지만, 클래스의 객체가 생성되는 시점에 자동으로 호출된다는 점에서 차이가 있습니다. 생성자는 주로 클래스의 인스턴스 변수(instance variable)를 초기화하는 용도로 사용됩니다.
생성자의 특징을 정리하면 다음과 같습니다.
- 클래스와 동일한 이름을 가져야 합니다.
- 반환 타입이 없습니다. (void조차 명시하지 않습니다.)
- 객체 생성 시(new 키워드 사용 시) 자동으로 한 번 호출됩니다.
생성자는 크게 두 가지 유형으로 나눌 수 있습니다.
- 매개변수가 있는 생성자(Parameterized Constructor)
- 매개변수가 없는 생성자(No-arg Constructor)
두 유형 모두 핵심 목적은 동일합니다. 바로 클래스의 인스턴스 변수를 초기화하는 것입니다.
예제 1: 매개변수가 없는 생성자로 초기화하기
다음 예제에서는 매개변수가 없는 생성자(no-arg constructor)를 사용하여 클래스의 인스턴스 변수에 고정값을 할당해 보겠습니다.
public class Test {
int num;
String data;
Test(){
num = 100;
data = "sample";
}
public static void main(String args[]){
Test obj = new Test();
System.out.println(obj.num);
System.out.println(obj.data);
}
}실행 결과
100 sample
객체가 생성되는 순간 생성자가 호출되면서 num과 data 변수가 각각 100과 "sample"로 초기화된 것을 확인할 수 있습니다.
예제 2: 매개변수가 있는 생성자로 초기화하기
다음 예제에서는 매개변수가 있는 생성자(parameterized constructor)를 사용하여, 사용자로부터 입력받은 값으로 인스턴스 변수를 초기화해 보겠습니다.
import java.util.Scanner;
public class Test {
int num;
String data;
Test(int num, String data){
this.num = num;
this.data = data;
}
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
System.out.println("Enter a string value: ");
String data = sc.nextLine();
System.out.println("Enter an integer value: ");
int num = sc.nextInt();
Test obj = new Test(num, data);
System.out.println(obj.num);
System.out.println(obj.data);
}
}실행 결과
Enter a string value: sample Enter an integer value: 1023 1023 sample
이번에는 생성자의 매개변수로 전달된 값이 this 키워드를 통해 현재 객체의 인스턴스 변수에 대입됩니다. 이처럼 매개변수가 있는 생성자를 활용하면 객체마다 서로 다른 값으로 초기화할 수 있다는 장점이 있습니다.
정리
생성자는 객체 생성 시점에 호출되어 인스턴스 변수를 초기화하는 특별한 멤버입니다. 고정된 값을 설정할 때는 매개변수가 없는 생성자를, 외부에서 전달한 값으로 유연하게 초기화하고 싶을 때는 매개변수가 있는 생성자를 사용하면 됩니다. 상황에 맞게 두 생성자를 적절히 활용하면 더욱 안정적이고 가독성 높은 Java 코드를 작성할 수 있습니다.