자바 클래스 객체 생성과 메모리 할당

황희윤·2023년 11월 6일
  1. Person person;
  2. person = new Person();
  3. person.speak();

1. Person person;

  • 참조 변수 선언

  • 참조 변수 : 값을 참조하기 위해 주소를 다룬다.

  • 참조 변수의 선언으로 새로운 객체가 생성되지 않는다. 참조 변수만 스택 메모리에 할당된다.

  • 4byte가 메모리에 할당되고 초깃값은 null(아무것도 가리키고 있지 않다)이 된다. 주소값이 없다.

2. new Person();

  • new연산자는 실행 중 메모리의 할당(동적 할당)을 요청한다.

  • 동적(dynamic) 할당 : 실행 중에 크기를 결정하고 에 크기만큼 할당한다.

  • 정적(static) 할당 : 컴파일 중에 크기가 결정되며 크기만큼 스택에 할당된다.

  • 생성자 Person()은 생성된 Person 객체의 속성을 초기화 한다.

  • 아직은 변수 person과 Person 객체가 연결되지 않은 상태다.

3. person = new Person();

  • new 연산자가 생성한 객체가 저장된 메모리의 주솟값(힙 주소)을 person에 대입한다.

  • 변수 person은 스택 메모리에 Person 객체는 힙 메모리에 위치 한다.

  • 이제 변수 person의 값은 null이 아닌 Person 객체의 주솟값이다.

  • 즉, person은 주솟값을 다루는 참조형 변수다.

  • 참조형 변수를 흔히 포인터라고 하는데, 메모리에 저장된 실체가 값이 아닌 주솟값이다. 자바에는 포인터 개념이 없다라고 알려져 있는데, 내부적으로는 포인터 개념이 있다.

new 연산자의 역할

  1. 객체를 저장할 메모리 할당
  2. 생성자 호출
  3. 객체의 힙 주솟값을 자료형에 맞게 변환 후 반환

4. person.speak();

  • person이 참조하는 객체(Person 객체)의 speak 메서드 호출

  • 점(.)이 객체 참조 명령

profile
HeeYun's programming study

0개의 댓글