객체지향 프로그래밍에서 생성자(Constructor)와 객체 초기화는 객체를 생성하고 초기 상태를 설정하는 중요한 개념입니다. 객체를 만들 때 반드시 호출되는 생성자는 객체의 초기 상태를 정의하고, 초기화 블럭은 객체의 필드를 초기화하는 또 다른 방법입니다. 생성자와 초기화 블럭을 잘 활용하면 객체를 더 효율적이고 안정적으로 생성할 수 있습니다.
변수의 초기화
명시적 초기화
변수를 선언할 때 기본값을 설정하는 것을 명시적 초기화라고 합니다. 가장 직관적이고 간단한 초기화 방법입니다.
public class Car {
String color = "White";
String manufacturer = "Unknown";
int speed = 0;
}
초기화 블럭
초기화 블럭은 {} 안에 초기화 코드를 작성해서 객체의 모든 생성자에서 공통적으로 초기화해야 할 로직을 정의하는 방법입니다.
- 인스턴스 초기화 블럭 : 객체가 생성될 때마다 실행됩니다.
- 정적 초기화 블럭 : 클래스가 처음 로딩될 때 한 번만 실행됩니다.
public class Car {
String color;
String manufacturer;
int speed;
// 인스턴스 초기화 블럭
{
speed = 10; // 모든 생성자에서 공통으로 초기화
}
public Car(String color, String manufacturer) {
this.color = color;
this.manufacturer = manufacturer;
}
// 정적 초기화 블럭
static {
System.out.println("Car 클래스가 로드되었습니다.");
}
}
생성자(Constructor)란?
생성자는 클래스가 객체로 만들어질 때(인스턴스화) 호출되는 메서드입니다. 객체의 초기 상태를 설정하는 역할을 하며, 객체가 생성될 때 반드시 한 번 호출됩니다.
- 생성자는 클래스 이름과 동일하며, 반환 타입이 없습니다.
- 객체가 생성될 때 필드나 속성 값을 초기화하며 자동으로 호출됩니다.
- 클래스에는 여러 생성자를 정의할 수 있으며, 이를 생성자 오버로딩이라고 합니다.
public class Car {
String color;
String manufacturer;
int speed
// 생성자
public Car(String color, String manufacturer, int speed) {
this.color = color;
this.manufacturer = manufacturer;
this.speed = speed;
}
}
기본 생성자
기본 생성자는 매개변수가 없는 생성자입니다. 만약에 클래스에 생성자가 정의되어 있지 않으면, 자바 컴파일러는 자동으로 기본 생성자를 생성해 줍니다. 기본 생성자는 객체의 필드를 초기화하지 않지만, 클래스 내부에서 객체를 생성하기 위한 기본적인 동작을 수행합니다.
public class Car {
String color;
String manufacturer;
int speed;
// 기본 생성자
public Car() {
this.color = "White";
this.manufacturer = "Unknown";
this.speed = 0;
}
}
매개변수가 있는 생성자
매개변수가 있는 생성자는 객체 생성 시 외부에서 초기 값을 전달받아 필드를 초기화할 때 사용됩니다. 객체의 초기 상태를 유연하게 설정할 수 있습니다.
public class Car {
String color;
String manufacturer;
int speed;
// 매개변수가 있는 생성자
public Car(String color, String manufacturer, int speed) {
this.color = color;
this.manufacturer = manufacturer;
this.speed = speed;
}
}
생성자에서 다른 생성자 호출하기 - this()
this()는 같은 클래스 내에서 다른 생성자를 호출할 때 사용됩니다. 이를 통해 중복된 코드 작성을 방지하고 더 간결하게 객체를 초기화할 수 있습니다.
public class Car {
String color;
String manufacturer;
int speed;
// 매개변수가 없는 생성자
public Car() {
this("White", "Unknown", 0); // 다른 생성자 호출
}
// 매개변수가 있는 생성자
public Car(String color, String manufacturer, int speed) {
this.color = color;
this.manufacturer = manufacturer;
this.speed = speed;
}
}
생성자를 이용한 인스턴스 복사
생성자를 활용해서 객체를 복사할 수 있습니다. 복사 생성자를 사용하면 기존 객체의 상태를 새로운 객체에 복사할 수 있습니다.
public class Car {
String color;
String manufacturer;
int speed;
// 복사 생성자
public Car(Car anotherCar) {
this.color = anotherCar.color;
this.manufacturer = anotherCar.manufacturer;
this.speed = anotherCar.speed;
}
}
멤버변수의 초기화 시기와 순서
- 명시적 초기화 : 필드를 선언할 때 초기값을 설정합니다.
- 초기화 블럭 : 인스턴스가 생성될 때 초기화 블럭이 실행됩니다.
- 생성자 : 마지막으로 생성자가 호출되어 객체를 초기화합니다.
결론
생성자와 객체 초기화는 객체의 상태를 설정하는 중요한 매커니즘입니다. 생성자는 객체가 생성될 때 필수적으로 호출되며, 초기화 블럭은 복잡한 초기화 로직을 단순화하고 일관된 초기화를 보장합니다. 객체지향 프로그래밍에서 생성자와 초기화 블럭을 잘 활용하면 유연한 객체 생성을 구현할 수 있습니다.
'☕️Java[자바] > OOP[객체지향프로그래밍]' 카테고리의 다른 글
[객체지향 프로그래밍] 변수와 메서드 : 클래스와 인스턴스의 상호작용 (0) | 2024.09.24 |
---|---|
[객체지향 프로그래밍] 캡슐화 - 데이터 보호와 정보 은닉의 핵심 원리 (0) | 2024.09.20 |
[객체지향 프로그래밍] 다형성 - 다양한 형태의 객체를 다루는 방법 (0) | 2024.09.18 |
[객체지향 프로그래밍] 추상화 - 복잡성을 줄이는 설계의 핵심 (1) | 2024.09.17 |
[객체지향 프로그래밍] 상속 - 코드의 재사용 (0) | 2024.09.17 |