[Java] Primitive type, Reference type

dustle·2022년 11월 26일
2

자바에는 크게 기본형 타입과 참조형 타입이 있습니다.


기본형 타입(Primitive type)

  • Null이 존재하지 않습니다.(Null을 사용하고 싶다면 Wrapper Class 활용)
  • Stack 메모리에 저장됩니다.
  • 8개 입니다.
  1. 논리형 : boolean
  2. 정수형 : byte, short, int, long
  3. 실수형 : float, double
  4. 문자형 : char

참조형 타입(Reference type)

  • 기본형을 제외한 모든 타입들이 참조형 타입입니다.
  • Null이 존재합니다.
  • new 와 생성자를 지정하여 객체를 생성합니다.
  • Heap 메모리에 저장됩니다.
  1. 배열(Array)
  2. 열거(Enumeration)
  3. 클래스(Class)
  4. 인터페이스(Interface)

실제 메모리는 힙에 저장되며, 객체들의 주소를 스택에 저장하여 객체를 사용할 때마다 힙에 있는 값을 가져와서 사용합니다.


기본형 타입과 Wrapper Class

주로 Wrapper Class를

List<Integer> list = new ArrayList<>();

등 리스트 선언할 때 봤을 것 입니다.

Wrapper Class는 기본형을 객체로 다루기 위해 사용합니다.

모든 기본형은 래퍼 클래스를 생성할 수 있습니다.

기본 자료형과 래퍼 클래스의 차이

기본 자료형

  • 산술 연산 가능
  • Null로 초기화 불가능

래퍼 클래스

  • 산술 연산 불가능
  • Null 초기화 가능
  • 값 비교를 위해 equals 메소드 사용
    (객체 간 비교이기 때문에 == 를 사용하면 주소값을 비교하게 됩니다.)

박싱(Boxing)과 언박싱(Unboxing)

기본형 -> 래퍼 클래스(참조형) = 박싱
래퍼 클래스(참조형) -> 기본형 = 언박싱

Integer wrapper = new Integer(1);

int primitive = (int)wrapper; //언박싱
Integer box = (Integer)1; //박싱

JDK 1.5부터 자동으로 박싱과 언박싱을 수행해주는 오토박싱과 오토언박싱이 생겼습니다.

Integer wrapper = new Integer(1);

int primitive = wrapper; //오토 언박싱
Integer box = 1; //오토 박싱

4개의 댓글

comment-user-thumbnail
2022년 11월 26일

좋은 정보에요!

1개의 답글
comment-user-thumbnail
2022년 11월 30일

멋진 글이에요!

1개의 답글