본문 바로가기
프로그래밍 언어/JAVA

[Java] 인스턴스와 메모리

by 티옌.liy 2022. 11. 9.

객체를 인스턴스화 하면

RAM 메모리에 적재되는데

이를 세부적으로 알아보면

 

객체를 대입한 변수는 참조형 변수가 되면서

함수의 지역변수 이므로 Stack 메모리에 적재되고

 

인스턴스 객체는 New 키워드로 동적 생성되면서

Heap 메모리에 적재된다.

 

 

1. 인스턴스

클래스는 객체의 속성과 기능을 청사진 처럼 정의만 해놓은 상태이다.
클래스 기반으로 생성된 객체(인스턴스)는 각각 다른 맴버 변수 값을 가진다.
new 키워드를 사용하면 인스턴스화 된 객체를 생성한다.

 

예제 코드 - 학생 객체 정의
public class Student {
	int studentId;
	public String studentName;
	String address;
	
	public void showStudentInfo() {
		System.out.printf("%d, %s, %s", studentId, studentName, address);
	}
	
	public String getStudentName() {
		return studentName;
	}
	
	public void setStudentName(String name) {
		studentName = name;
	}
}
예제 코드 - 학생 객체 인스턴스화
public class TestMainClass {

	public static void main(String[] args) {
		Student testStudent = new Student();
		
		testStudent.studentId = 12345;
		testStudent.setStudentName("tester1");
		testStudent.address = "서울특별시 행복구";
		
		testStudent.showStudentInfo();

	}
}
실행 결과
12345, tester1, 서울특별시 행복구

 

2.  인스턴스 시 메모리 현황

생성된 인스턴스는 동적 메모리(Heap Memory)에 할당된다.

 

C, C++ 언어에서는 프로그래머가 직접 할당 및 해제를 수행한다.(free(), Delete)

Java에서는 GC(garbage collector)가 주기적으로 사용하지 않는 메모리는 해제한다.

 

하나의 클래스로부터 여러 인스턴스가 생성하면

stack memory에는 인스턴스 객체 참조 변수가

heap money에는 객체 구성 요소가 생성된다.

인스턴스 객체 생성 시 메모리 현황

 

실제로 인스턴스 객체를 가진 변수를 출력해보면 heap memory의 시작 주소 값을 가지는걸 확인할 수 있다

 

예제 코드 - 인스턴스 객체 출력
System.out.println(testStudent);
실행 결과
패키지이름 . 클래스 이름 @ heap memory 값
testpackage.Student@365185bd

16진수 ' 365185bd ' 값이 heap memory에 인스턴스 객체가 있는 주소 값이다.

 

3. 용어 정리

처음 배울때 여러 용어때문에 혼란스러운 경우가 많다.

그래서 용어를 정리하여 기술한다.

객체 생성된 인스턴스
클래스 객체를 프로그래밍 하기 위해 코드로 정의한 것
인스턴스 new 키워드로 클래스를 메모리에 적재한 상태
프로퍼티, 맴버 변수 클래스의 속성, 특성
메서드 , 맴버 함수 맴버 변수를 활용하여 클래스의 기능을 구현한 함수
 참조 변수 메모리에 생성된 인스턴스를 가리키는 변수
 참조 값 생성된 인스턴스 메모리 주소 값

 

댓글