생성자의 정의
자바의 객체 지향 프로그래밍에서, 생성자는 객체가 생성될 때 자동으로 호출되는 특수한 메서드입니다.
이 메서드는 객체의 필드를 초기화하고, 객체가 정상적으로 작동할 수 있도록 준비하는 중요한 역할을 수행합니다.
생성자의 목적
- 객체 초기화: 생성자는 객체가 생성될 때 필드를 초기화하는 역할을 합니다. 이는 각 객체가 고유한 상태를 가질 수 있도록 해줍니다.
- 다양한 초기값 설정: 클래스 설계상에 초기값을 설정하지 않으면 모든 객체가 동일한 데이터를 갖게 될 위험이 있습니다. 생성자는 객체 생성 시점부터 원하는 초기값을 설정할 수 있도록 합니다.
생성자의 특징
이름과 리턴 타입
- 생성자의 이름은 클래스의 이름과 동일해야 합니다.
- 생성자는 리턴 타입이 없으며, void를 사용하지 않습니다.
자동 호출
- 객체가 생성될 때 new 연산자와 함께 자동으로 호출됩니다.
기본 생성자
- 사용자가 생성자를 선언하지 않으면, 컴파일러가 기본 생성자를 자동으로 제공합니다. 그러나 사용자가 하나 이상의 생성자를 선언하면, 컴파일러는 기본 생성자를 제공하지 않습니다.
오버로딩
- 생성자는 매개변수를 다르게 하여 여러 개를 작성할 수 있습니다. 이로 인해 다양한 방법으로 객체를 초기화할 수 있습니다.
생성자의 종류
기본 생성자 (Default Constructor)
- 매개변수가 없는 생성자로, 특별한 데이터를 초기화하지 않을 경우 사용합니다. 사용자가 생성자를 선언하지 않으면 자동으로 제공됩니다.
매개변수가 있는 생성자 (Parameterized Constructor)
- 객체를 생성함과 동시에 특정 값으로 초기화하고 싶을 때 사용합니다. 외부에서 전달받은 값을 통해 필드를 초기화합니다.
복사 생성자 (Copy Constructor)
- 다른 객체의 상태를 복사하여 새 객체를 초기화할 때 사용합니다. 이는 객체를 복사할 때 유용합니다.
예제: Book 클래스
public class Book {
private String title;
private String author;
private int pages;
// 기본 생성자
public Book() {
this.title = "Unknown";
this.author = "Unknown";
this.pages = 0;
}
// 매개변수가 있는 생성자
public Book(String title, String author, int pages) {
this.title = title;
this.author = author;
this.pages = pages;
}
}
객체 생성 및 사용
public class HelloWorld {
public static void main(String[] args) {
Book myBook1 = new Book(); // 기본 생성자 호출
Book myBook2 = new Book("titleA", "authorB", 12); // 매개변수가 있는 생성자 호출
}
}
생성자와 다른 메서드의 차이
- 호출 시점: 생성자는 객체 생성 시 딱 한 번만 호출되며, setter 메서드는 객체 생성 이후에 언제든지 호출할 수 있습니다.
- 역할: 생성자는 객체의 필드를 초기화하는 역할을 수행하고, setter 메서드는 기존 값을 덮어쓰거나 변경하는 역할을 수행합니다.
추가적인 고려사항
- private 생성자: 외부에서 객체를 생성하는 과정을 통제하는 수단으로 사용됩니다. 예를 들어, Math 클래스는 private 생성자를 사용하여 외부에서 객체를 생성하지 못하도록 합니다.
- this와 this(): 생성자에서 다른 생성자를 호출할 때 사용됩니다. 예를 들어, 기본 생성자가 다른 생성자를 호출하여 초기화를 간소화할 수 있습니다.
이와 같이, 자바의 생성자는 객체의 초기화와 다양한 초기값 설정을 위한 중요한 역할을 합니다.
올바르게 이해하고 사용하는 것은 객체 지향 프로그래밍에서 매우 중요합니다.
'JAVA' 카테고리의 다른 글
| 자바에서 Class 상속하기 (1) | 2024.12.13 |
|---|---|
| 자바에서 사용하는 Getter와 Setter 알아보기 (0) | 2024.12.13 |
| 자바에서 메서드 오버로딩(Method Overloading) 하기 (0) | 2024.12.12 |
| 자바에서 사용하는 메서드(Method)에 대해 알아보기 (0) | 2024.12.12 |
| JAVA에서 사용하는 클래스와 객체에 대한 이해 (0) | 2024.12.10 |