OOP 개념: 생성자(Constructor)
이번 글에서는 객체 지향 프로그래밍(Object-Oriented Programming, OOP)의 핵심 요소 중 하나인 '생성자(Constructor)'에 대해 상세하게 알아보겠습니다. 이전 글에서는 객체의 필드 참조 메서드인 getter와 setter에 대해 배웠으니, 이제 객체를 생성하는 방법에 대해 더 깊게 살펴보겠습니다.
1. 생성자란 무엇인가?
객체 지향 프로그래밍에서 '생성자'는 클래스를 통해 객체가 생성될 때 호출되는 특별한 메서드입니다. 각 클래스에 따라 다양한 형태와 목적을 가진 여러 개의 생성자를 가질 수 있습니다.
생성자의 이름은 클래스 이름과 동일하며, 리턴 타입을 명시하지 않습니다. 주로 초기화 작업을 수행하는 데 사용되며, 필요한 매개변수를 받아 필드 값을 설정할 수 있습니다. 이렇게 함으로써 객체가 제대로 작동하기 위해 필요한 초기 상태를 설정할 수 있게 됩니다.
2. 왜 생성자를 사용하는가?
객체가 제대로 작동하기 위해서는 일부 필드들이 반드시 초기화되어야 할 경우가 많습니다. 예를 들어, Dog 클래스의 모든 인스턴스가 반드시 name과 age 값을 가져야 한다면, 이런 값들은 객체 생성 시점에 설정되어야 합니다.
또한, 생성자를 통해 값의 유효성 검사도 수행할 수 있습니다. 예를 들어 age 값이 양수인지 확인하는 등의 작업을 수행하여 잘못된 값으로 인스턴스가 만들어지는 것을 방지할 수 있습니다.
더 나아가서, 여러 개의 생성자를 정의함으로써 다양한 방식으로 같은 클래스의 인스턴스를 만들 가능성도 열립니다 - 이것을 '생성자 오버로딩(constructor overloading)'이라고 합니다.
3. 생성자 구현하기
Java 언어 기준으로 Dog 클래스 내부에 name과 age라는 두 개 private 필들르 가지고 있다고 가정합니다. 각각에 대한 Constructor(생성자) 구현은 아래처럼 할 수 있습니다:
예시 코드:
public class Dog {
private String name;
private int age;
// Default Constructor
public Dog() {
this.name = "Unknown";
this.age = 0;
}
// Parameterized Constructor
public Dog(String name, int age) {
this.name = name;
if(age > 0){
this.age = age;
} else{
System.out.println("Invalid age");
this.age = 0; // Invalid value is set to default
}
}
}
위 코드에서 볼 수 있듯이 `Dog()`와 `Dog(String name, int age)` 메서드는 각각 기본 생성자와 매개변수가 있는 생성자입니다. 유효하지 않은 나잇값 입력 시 에러 메시지 출력 후 기본값으로 설정합니다.
4. 생성자를 통한 객체 생성
생성자 메서드를 통해 새로운 객체를 안전하게 생성할 수 있습니다.
예시 코드:
Dog myDog = new Dog("Rex", 5);
System.out.println(myDog.getName()); // "Rex" 출력
System.out.println(myDog.getAge()); // "5" 출력
Dog unknownDog = new Dog();
System.out.println(unknownDog.getName()); // "Unknown" 출력
System.out.println(unknownDog.getAge()); // "0" 출력
5. 결론
객체 지향 프로그래밍에서 '생성자'는 객체의 초기 상태를 설정하는 중요한 메커니즘입니다. 이를 통해 필드에 안전하게 접근하고, 데이터의 유효성을 보장할 수 있습니다.
또한, 여러 개의 생성자를 가지고 있음으로써 다양한 초기 상태로 같은 클래스의 인스턴스를 만들 수 있다는 장점도 있습니다. 이런 기능은 코드의 유연성을 높여줍니다.
이러한 초기화 기법은 데이터 보호, 코드 재사용성 및 유지 관리성 증진에 중요한 역할을 합니다. 따라서 생성자의 정확한 구현 방법과 사용 방법을 이해하는 것은 객체 지향 프로그래밍의 핵심 요소 중 하나입니다.