생성자와 객체 생성에 대한 이해
1. 생성자의 역할
- 생성자(Constructor)는 객체를 생성한 후 초기화하는 작업을 수행합니다.
- 생성자는 메모리 할당을 담당하지 않습니다.
- 메모리 할당은
new
키워드가 처리하며, 생성자는 메모리가 할당된 이후 호출됩니다.
- 메모리 할당은
2. 객체 생성 과정의 역할 분담
1) 메모리 할당 (new
키워드)
- JVM이 클래스 설계에 따라 힙 메모리 영역에 메모리 공간을 할당합니다.
- 메모리 공간에는 클래스의 필드가 기본값으로 초기화됩니다.
- 예:
int
→ 0,String
→null
,boolean
→false
- 예:
2) 객체 초기화 (생성자 호출)
new
키워드로 메모리 공간이 할당된 후, 생성자가 호출됩니다.- 생성자는 객체 생성 시 전달받은 인자를 사용해 필드 값을 설정하거나 초기화 작업을 수행합니다.
3. 생성자가 메모리를 할당하지 않는 이유
- 메모리 할당은 JVM의 역할입니다.
new
키워드가 실행되면 JVM이:- 힙(Heap) 메모리 영역에 객체를 생성.
- 생성된 객체의 메모리 주소를 반환.
- 생성자는 이미 할당된 메모리를 초기화하기 위한 작업만 담당합니다.
4. 객체 생성 흐름
Car myCar = new Car("Red", 100);
실제 실행 흐름
메모리 할당 (
new
)- JVM이 힙 메모리 영역에
Car
클래스의 필드(color
,speed
)에 대한 공간을 생성. - 기본값으로 초기화:
color
→null
speed
→0
- JVM이 힙 메모리 영역에
생성자 호출
new Car("Red", 100)
호출.- 전달된 값(
"Red"
,100
)으로color
,speed
필드 초기화.
참조 변수에 메모리 주소 저장
- 생성된 객체의 메모리 주소가
myCar
변수에 저장. myCar
를 통해 객체에 접근 가능.
- 생성된 객체의 메모리 주소가
5. 예제 코드
class Car {
String color;
int speed;
// 생성자
Car(String color, int speed) {
this.color = color;
this.speed = speed;
}
}
public class Main {
public static void main(String[] args) {
// 객체 생성
Car myCar = new Car("Blue", 120);
// 객체 정보 출력
System.out.println("Color: " + myCar.color);
System.out.println("Speed: " + myCar.speed);
}
}
실행 흐름
- JVM이
Car
객체를 위해 힙 메모리 공간을 할당. - 생성자가 호출되어:
color
→"Blue"
speed
→120
으로 초기화.
myCar
는 생성된 객체의 메모리 주소를 참조.
6. 메모리 할당과 초기화의 구분
단계 | 역할 | 수행 주체 |
---|---|---|
메모리 할당 | 객체가 저장될 메모리 공간 확보 | new 키워드, JVM |
초기화 | 필드 값 설정 및 추가 작업 수행 | 생성자(Constructor) |
7. 생성자가 메모리를 할당하지 않는 이유
- 생성자는 메모리가 할당된 후에 호출됩니다.
- 메모리 할당은 JVM과
new
키워드가 처리하며, 생성자는 데이터 초기화만 수행합니다.
8. 결론
- 메모리 할당은
new
키워드가 담당합니다. - 생성자는 객체를 초기화하며, 메모리 할당에는 관여하지 않습니다.
- 객체 생성은 다음 순서로 진행됩니다:
- 메모리 할당 → 생성자 호출 → 참조 변수에 주소 저장.
'자바 > 객체지향 프로그래밍(OOP)' 카테고리의 다른 글
String과 래퍼 클래스의 객체생성 (0) | 2025.02.07 |
---|---|
클래스란? (0) | 2025.01.26 |
추상 클래스 (0) | 2025.01.23 |
업캐스팅과 다운캐스팅 상태에서의 변수와 메서드 사용 가능 여부 (0) | 2025.01.23 |
인스턴스 변수 (0) | 2025.01.23 |