[Java] 데이터 타입 - 기본형, 참조형

해니·2024년 2월 7일
1

Java

목록 보기
10/34
post-thumbnail

기본형 타입 (Primitive Type)

int age = 25; // 가능
int num = null; // 불가능
  • 논리형 (boolean),  문자형 (char),  정수형 (byte, short, int, long)  실수형 (float, double) 으로 나뉜다.
  • 기본형 타입의 특징
    • 비객체 타입이므로 null 값을 가질 수 없다.
      ➡️ 기본값이 정해져 있음
    • 산술 연산이 가능하다.
    • 변수의 선언과 동시에 메모리 생성된다.
    • 모든 값 타입은 메모리의 스택(stack)에 저장된다.




참조형 타입 (Reference Type)

// 출처: https://inpa.tistory.com/entry/JAVA-☕-변수의-기본형-참조형-타입 [Inpa Dev 👨‍💻:티스토리]
String name = "홍길동";
String[] hobby = new String() {"독서", "게임", "등산"};
Date date = new Date();
  • 기본형 타입 (Primitive Type)을 제외한 나머지 모든 타입
  • 참조형 타입 특징
    • null로 초기화 시킬 수 있다
    • 산술 연산이 불가능하다.
    • 실제 값이 저장되지 않고, 자료가 저장된 공간의 주소를 저장한다.
      • 실제 값은 다른 곳에 있으며 값이 있는 주소를 가지고 있어서 나중에 그 주소를 참조해서 값을 가져온다.
    • 메모리의 힙(heap)실제 값을 저장하고, 그 참조값(주소값)을 갖는 변수는 스택(stack)에 저장한다.




💡 Java의 메모리 구조


스택(Stack)

  • 메소드 내에서 정의하는 기본 자료형에 해당되는 지역변수의 데이터 값이 저장되는 공간
  • 메소드가 호출될때 스택 영역에 스택 프레임이 생기고 그안에 메소드를 호출한다.
  • 원시 타입(primitive type)의 데이터 (int, double, byte, long, boolean 등)에 해당되는 지역변수, 매개 변수 데이터 값이 저장된다.
  • 메소드가 호출 될 때 메모리에 할당되고 종료되면 메모리에서 사라진다.
  • 후입선출 LIFO(Last-In-First-Out) 의 특성을 가지며, 스코프(Scope) 의 범위를 벗어나면 스택 메모리에서 사라진다.
  • 스레드 개수마다 각각 생성된다.

힙(Heap)

  • JVM이 관리하는 프로그램 상에서 데이터를 저장하기 위해 런타임 시 동적으로 할당하여 사용하는 영역
  • 참조형 타입(Reference Type)을 갖는 객체(인스턴스), 배열 등이 저장 되는 공간
    • Heap 영역에 있는 오브젝트들을 가리키는 레퍼런스 변수는 stack에 적재된다.
  • 보관되는 메모리가 호출이 끝나더라도 삭제되지 않고 유지된다.
    • 어떤 참조 변수도 Heap 영역에 있는 인스턴스를 참조하지 않게 된다면, GC(가비지 컬렉터)에 의해 메모리에서 청소된다.
  • 스레드 개수와 무관하게 단 하나의 Heap 영역만 존재한다.

이미지 춡처: https://www.studytonight.com/java-examples/java-stack-and-heap-memory#google_vignette




참고
JAVA 변수의 기본형 & 참조형 타입 차이 이해하기
[Java] 기본형 변수와 참조형 변수
자바 메모리 관리 - 스택 & 힙
그림으로 보는 자바 코드의 메모리 영역(스택 & 힙)

profile
💻 ⚾️ 🐻

0개의 댓글