개발자 준비과정/JAVA

[JAVA] 참조타입의 특징

하늘바람a 2024. 3. 1. 17:15
참조타입 : 객체의 주소를 저장하는 타입

 

 

 

 

데이터 타입(자료형)

: 변수에 적재할 데이터가 메모리에 어떻게 저장되고 프로그램에서 어떻게 처리되어야 하는지를 알려주는 키워드

기본형(primitive type) : 실제 값을 저장한다.
참조형(reference type) : 객체의 주소를 저장한다. null 또는 객체의 주소(4byte, 0x0 ~ 0xffffffff)를 갖는다.
자바에서 실제 객체는 Heap 영역에 저장되며 참조 타입 변수는 스택 영역에 실제 객체들의 주소를 저장하여 객체를 사용할 때마다 참조 변수에 저장된 객체의 주소를 불러와 사용하는 방식이다.

 

기본형 타입의 특징
  • 비객체 타입이므로 null 값을 가질 수 없다. (기본값이 정해져 있음)
  • 변수의 선언과 동시에 메모리 생성
  • 모든 값 타입은 메모리의 스택(stack)에 저장
  • 저장공간에 실제 자료 값을 가진다
참조형 타입의 특징
  • 기본형 과는 달리 실제 값이 저장되지 않고, 자료가 저장된 공간의 주소를 저장한다.
  • 즉, 실제 값은 다른 곳에 있으며 값이 있는 주소를 가지고 있어서 나중에 그 주소를 참조해서 값을 가져온다.
  • 메모리의 힙(heap)에 실제 값을 저장하고, 그 참조값(주소값)을 갖는 변수는 스택에 저장한다
  • 참조형 변수는 null로 초기화 시킬 수 있다
    • null값을 가지는지 알고 싶을 때 ==, != 연산을 수행할 수 있다.
    • 변수가 null인 상태에서 객체의 데이터나 메소드를 사용하려 할 때 NullPointerException 에러가 발생한다.

객체(Object)

데이터와 메소드로 구성된 덩어리이다. 객체 = 데이터(필드) + 메소드

 

기본타입의 변수와 참조타입의 변수의 차이점
차이점 기본타입의 변수 참조타입의 변수
메모리 할당 스택 메모리에 할당
변수의 생명주기가 끝나면 자동으로 메모리 반환
힙 메모리에 할당
직접 메모리를 관리해야 함(자바의 경우 가비지 컬렉터가 이 역할을 함)
저장되는 값 실제 값 저장 메모리 주소 저장
실제 값이 아닌 힙 메모리의 객체를 참조함
null 사용 불가능 가능
(아무런 객체도 참조하지 않음을 의미)
디폴트 값 O (int의 경우 0) null값

 


Stack 영역

지역 변수, 파라미터, 리턴 값, 연산에 사용되는 임시 값 등이 생성되는 영역이다.

메소드를 호출할 때마다 스택 영역이 생성되고, 기본 타입 변수나 참조 타입 변수가 쌓이고 사라지고 반복한다.

기본 타입 변수의 경우에 int a = 10; 이라는 코드를 작성했다면 정수 값이 할당될 수 있는 a라는 이름의 메모리 공간이 스택 영역에 생성되고 10이라는 값이 들어간다.

참조 타입 변수의 경우에는 클래스 Person p = new Person(); 이라는 코드를 작성했다면 p라는 이름의 메모리 공간이 스택 영역에 생성되고 생성된 p의 인스턴스는 Heap 영역에 생성된다.

스택 영역에 생성된 p는 Heap 영역에 생성된 p의 인스턴스 주소 값을 가지게 된다.

Heap 영역

new 키워드로 생성된 객체와 배열이 생성되는 영역이다. 메소드 영역에 로드된 클래스만 생성이 가능하고 가비지 컬렉터가 참조되지 않는 메모리를 확인하고 제거하는 영역이다.

 


 

 

2024.02.29 - [개발자 준비과정/JAVA] - [JAVA] 변수 선언과 할당, 그리고 스택(Stack)과 힙(Heap)

 

[JAVA] 변수 선언과 할당, 그리고 스택(Stack)과 힙(Heap)

변수를 사용하기 위한 변수 선언은 변수 타입과 변수 이름을 결정합니다 변수선언은 저장되는 값의 타입과 이름만 결정한 것이지, 아직 메모리에 할당된 것은 아닙니다. 변수 할당 : 변수에 최

kiwi85547.tistory.com

 

출처:

https://inpa.tistory.com/entry/JAVA-☕-변수의-기본형-참조형-타입

 

☕ JAVA 변수의 기본형 & 참조형 타입 차이 이해하기

변수의 기본형 & 참조형 타입 변수(variable)란 데이터(data)를 저장하기 위해 프로그램에 의해 이름을 할당받은 메모리 공간을 의미한다. 그리고 자바에서 말하는 데이터 타입(자료형)이란, 변수에

inpa.tistory.com

https://week-year.tistory.com/141

 

[Java] 기본 타입 vs 참조 타입 (feat. heap, stack 영역)

1. 기본 타입 (Primitive type) 정수, 실수, 문자, 논리 리터럴을 저장하는 타입을 말하고 원시 타입이라고도 부른다. 정수형 : byte, short, int, long 실수형 : float, double 문자형 : char 논리형 : boolean 실제 데

week-year.tistory.com