Java에서 클래스의 생성자(Constructor)는 해당 클래스의 인스턴스를 초기화하는 특별한 메서드입니다. 생성자는 클래스와 동일한 이름을 가지며, 객체가 생성될 때 자동으로 호출됩니다. 생성자는 주로 다음과 같은 목적으로 사용됩니다:
인스턴스 변수 초기화: 생성자를 사용하여 객체가 생성될 때 인스턴스 변수를 초기화할 수 있습니다. 이를 통해 객체가 항상 유효한 상태로 시작할 수 있습니다.
매개변수 전달: 생성자는 객체 생성 시에 필요한 매개변수를 전달할 수 있습니다. 이를 통해 객체를 생성하는 동시에 필요한 정보를 초기화할 수 있습니다.
오버로딩: 하나의 클래스에 여러 개의 생성자를 정의하여 다양한 초기화 방법을 제공할 수 있습니다. 이를 생성자 오버로딩(Overloading)이라고 합니다.
자원 관리: 생성자를 사용하여 객체를 생성할 때 필요한 자원을 할당하고, 객체가 더 이상 필요하지 않을 때 자원을 해제할 수 있습니다.
다음은 생성자의 기본적인 사용 예제입니다:
class Person {
String name;
int age;
// 기본 생성자
public Person() {
name = "Unknown";
age = 0;
}
// 매개변수를 받는 생성자
public Person(String n, int a) {
name = n;
age = a;
}
public void introduce() {
System.out.println("My name is " + name + " and I am " + age + " years old.");
}
}
public class Main {
public static void main(String[] args) {
// 기본 생성자 호출
Person person1 = new Person();
person1.introduce(); // 출력: My name is Unknown and I am 0 years old.
// 매개변수를 받는 생성자 호출
Person person2 = new Person("Alice", 25);
person2.introduce(); // 출력: My name is Alice and I am 25 years old.
}
}
위의 예제에서 Person 클래스에는 기본 생성자와 매개변수를 받는 생성자 두 가지가 정의되어 있습니다. 생성자를 통해 객체를 초기화하고 필요한 정보를 전달할 수 있습니다.
Q. 위에서처럼 생성자 두 가지를 생성하면 프로그램 작동에 문제는 없어? 매개변수를 받지 않아도 잘 실행이 되는거지? 그리고 매개변수 두 개 name, age를 넣으면 결과값이 나오는거고.
네, 생성자를 두 가지 이상 정의하는 것은 프로그램 작동에 문제가 없습니다. Java에서는 생성자의 시그니처(매개변수의 개수와 타입 순서)를 기반으로 어떤 생성자를 호출할지 결정합니다. 따라서 생성자를 오버로딩하여 여러 개의 생성자를 정의하면, 호출 시 전달되는 인자의 타입 및 개수에 따라 알맞은 생성자가 호출됩니다.
예를 들어, 위의 Person 클래스에서는 기본 생성자(Person())와 매개변수를 받는 생성자(Person(String n, int a)) 두 가지 생성자가 있습니다.
Person() 생성자는 매개변수 없이 호출하면 이름(name)을 "Unknown"으로, 나이(age)를 0으로 초기화합니다.
Person(String n, int a) 생성자는 이름과 나이를 매개변수로 받아 해당 값으로 초기화합니다.
따라서 객체를 생성할 때 전달되는 인자의 유무에 따라 적절한 생성자가 선택되어 초기화가 수행됩니다. 예를 들어, new Person()로 객체를 생성하면 기본 생성자가 호출되어 "Unknown" 이름과 0 나이로 초기화됩니다. 반면에 new Person("Alice", 25)로 객체를 생성하면 매개변수를 받는 생성자가 호출되어 "Alice" 이름과 25 나이로 초기화됩니다.