자율 학습/학습

[Java] Primitive Type (원시 타입), Reference Type (참조 타입) 차이점, Wrapper Class (포장 클래스)

2022. 12. 12. 17:04

자바의 데이터 타입은 크게 두 가지가 있다.

1. Primitive Type : 정수, 실수, 문자, 논리 리터럴 등의 실제 데이터 값을 저장하는 타입

2. Reference Type : 객체(Object)의 번지를 참조(주소를 저장)하는 타입으로 메모리 번지 값을 통해 객체를 참조하는 타입

 

 

 

원시 타입 (기본 타입, Primitive Type)

종류 데이터형
논리형 boolean
문자형 char
정수형 byte
정수형 short
정수형 int
정수형 long
실수형 float
실수형 double

 

 

 

참조 타입 (Reference Type)

: 원시 타입을 제외한 타입들

ex) 문자열, 배열, 열거, 클래스, 인터페이스

 

 

 

 


Java에서 실제 객체는 힙 영역에 저장된다.

참조 타입 변수는 스택 영역에 실제 객체들의 주소를 저장하고, 객체를 사용할 때마다 참조 변수에 저장된 객체의 주소를 불러와 사용한다.

 

정적 메모리 스택 영역

- 스택 영역에는 기본 타입 변수가 할당되고 변수의 실제 값들이 저장된다.

참조 타입 변수들은 이 스택 영역에서 힙 영역에 생성된 객체들의 주소 값을 저장하고 있는다.

객체 안 메소드의 작업이 종료되면 할당되었던 메모리 공간은 반환되어 비워진다.

- 원시 타입스택 메모리에 값이 존재한다.

 

 

동적 메모리 힙 영역

- 힙 영역에는 객체와 배열이 생성된다.

참조 타입들이 이 객체들의 주소를 스택 영역에 저장한다. 프로그램 실행 시 메모리에 동적으로 할당된다.

참조하는 변수가 없으면 자바의 가비지 컬렉터가 제거한다.

- 참조 타입은 하나의 인스턴스이기 때문에 스택 메모리에는 참조 값만 있고, 실제 값은 힙 메모리에 존재한다.

 

 

 

 


래퍼 클래스 (Wrapper Class)

  • 원시 타입을 객체로 다루기 위해 사용하는 클래스
  • 자바의 모든 원시 타입은 그 값에 맞는 객체를 생성할 수 있고, 그 객체를 포장 객체라고 한다.
    • ex) byte → Byte, int → Integer
  • 포장하고 있는 원시 타입 값은 외부에서 변경할 수 없다.
  • 변경하고 싶다면 새로운 포장 객체를 만들어야 한다.

 

 

 

 


 

Boxing

: 원시 타입의 값을 포장 객체로 만드는 과정

 

Unboxing

: 포장 객체에서 원시 타입의 값을 얻어내는 과정

 

 

 

 


원시 타입 vs 참조 타입

  Primitive Type (원시 타입) Reference Type (참조 타입)
Null 포함 가능 X Null 포함 O
Generic 타입에서 사용 가능 X Generic 타입에서 사용 O
접근 속도 비교적 빠름 언박싱 → 비교적 느림
변수 안에 저장되는 값 실제 값 메모리의 번지
값 존재 위치 스택 메모리 힙 메모리
사용하는 메모리 양   매우 큼 → 효율적 사용
ex) boolean - 1 bit
Boolean - 128 bits

 

 

 

 

 

 

출처: https://velog.io/@gillog/%EC%9B%90%EC%8B%9C%ED%83%80%EC%9E%85-%EC%B0%B8%EC%A1%B0%ED%83%80%EC%9E%85Primitive-Type-Reference-Type

https://daegom.com/main/java-post4/

혼자 공부하는 자바 498쪽