자바/객체지향 프로그래밍(OOP)

생성자와 객체생성에 대한 이해

Blue_bull 2025. 1. 27. 14:01

생성자와 객체 생성에 대한 이해

1. 생성자의 역할

  • 생성자(Constructor)는 객체를 생성한 후 초기화하는 작업을 수행합니다.
  • 생성자는 메모리 할당을 담당하지 않습니다.
    • 메모리 할당new 키워드가 처리하며, 생성자는 메모리가 할당된 이후 호출됩니다.

2. 객체 생성 과정의 역할 분담

1) 메모리 할당 (new 키워드)

  • JVM이 클래스 설계에 따라 힙 메모리 영역에 메모리 공간을 할당합니다.
  • 메모리 공간에는 클래스의 필드가 기본값으로 초기화됩니다.
    • 예: int → 0, Stringnull, booleanfalse

2) 객체 초기화 (생성자 호출)

  • new 키워드로 메모리 공간이 할당된 후, 생성자가 호출됩니다.
  • 생성자는 객체 생성 시 전달받은 인자를 사용해 필드 값을 설정하거나 초기화 작업을 수행합니다.

3. 생성자가 메모리를 할당하지 않는 이유

  • 메모리 할당은 JVM의 역할입니다.
    • new 키워드가 실행되면 JVM이:
      1. 힙(Heap) 메모리 영역에 객체를 생성.
      2. 생성된 객체의 메모리 주소를 반환.
  • 생성자는 이미 할당된 메모리를 초기화하기 위한 작업만 담당합니다.

4. 객체 생성 흐름

Car myCar = new Car("Red", 100);

실제 실행 흐름

  1. 메모리 할당 (new)

    • JVM이 힙 메모리 영역에 Car 클래스의 필드(color, speed)에 대한 공간을 생성.
    • 기본값으로 초기화:
      • colornull
      • speed0
  2. 생성자 호출

    • new Car("Red", 100) 호출.
    • 전달된 값("Red", 100)으로 color, speed 필드 초기화.
  3. 참조 변수에 메모리 주소 저장

    • 생성된 객체의 메모리 주소가 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);
    }
}

실행 흐름

  1. JVM이 Car 객체를 위해 힙 메모리 공간을 할당.
  2. 생성자가 호출되어:
    • color"Blue"
    • speed120으로 초기화.
  3. myCar는 생성된 객체의 메모리 주소를 참조.

6. 메모리 할당과 초기화의 구분

단계 역할 수행 주체
메모리 할당 객체가 저장될 메모리 공간 확보 new 키워드, JVM
초기화 필드 값 설정 및 추가 작업 수행 생성자(Constructor)

7. 생성자가 메모리를 할당하지 않는 이유

  • 생성자는 메모리가 할당된 후에 호출됩니다.
  • 메모리 할당은 JVM과 new 키워드가 처리하며, 생성자는 데이터 초기화만 수행합니다.

8. 결론

  1. 메모리 할당new 키워드가 담당합니다.
  2. 생성자는 객체를 초기화하며, 메모리 할당에는 관여하지 않습니다.
  3. 객체 생성은 다음 순서로 진행됩니다:
    • 메모리 할당생성자 호출참조 변수에 주소 저장.