본문 바로가기
개발공부/Java

[Java] 03. 인스턴스 생성과 힙 메모리 (heap memory)

by sangyeon 2021. 11. 17.
728x90

1. 인스턴스란?

- 클래스는 객체의 속성을 정의하고 기능을 구현하여 만들어 놓은 코드 상태이다.

- 실제 클래스 기반으로 생성된 객체(인스턴스)는 각각 다른 멤버 변수 값을 가지게 된다.

(ex. student_1.setStudentName("이순신") / student_2.setStudentName("김유신") 혹은 서로 다른 학번, 학년 등)

그렇게 될 수 있는 이유는 각각의 객체는 서로 다른 메모리에 위치해 있기 때문.

 

- new 키워드를 사용하여 인스턴스를 생성한다.

 

2. 힙 메모리

- 생성된 인스턴스는 동적 메모리(heap memory)에 할당된다.

- C나 C++ 언어에서는 사용한 동적 메모리를 프로그래머가 해제 시켜야 함 (free()나 delete 이용)

- 자바에서 Garbage Collector가 주기적으로 사용하지 않는 메모리를 수거한다.

- 하나의 클래스로부터 여러 개의 인스턴스가 생성되고 각각 다른 메모리 주소를 가지게 된다.

 

실제로 소스 코드에서 객체를 sysout으로 찍어보면 참조 값을 확인할 수 있다.

 

Student student_1 = new Student();

Student student_2 = new Student();

 

--> 결과 값

ch04.Student@1c4af82c
ch04.Student@379619aa

 

[패키지명].[클래스명]@참조 값(reference value)

참조 값은 heap에 student_1과 student_2가 자리한 가상 주소 값이다.

 

그래서 아래 그림을 보면

student_1과 student_2는 단순 지역변수이고, 해당 객체가 생성되는 순간

Heap 공간에 해당 인스턴스의 주소 값이 저장된다.

 

그리고 student_1.setStudentName("이순신"); 으로 인스턴스의 멤버변수 값을 설정하면 주소 값을 가리키는 메모리 공간에 데이터가 들어간다.

 

그래서 student_1과 같은 애들을 참조변수라고도 말한다.

 

3. 용어 정리

용어 의미
객체  객체 지향 프로그램의 대상, 생성된 인스턴스
클래스 객체를 프로그래밍 하기 위해 코드로 정의해 놓은 상태
인스턴스 new 키워드를 사용하여 클래스를 메모리에 생성한 상태
멤버 변수 클래스의 속성, 특성
메서드 멤버 변수를 이용하여 클래스의 기능을 구현한 함수
참조 변수 메모리에 생성된 인스턴스를 가리키는 변수
참조 값 생성된 인스턴스의 메모리 주소 값

 

728x90