기본 자료형과 참조 자료형

parkrootseok·2025년 2월 3일

자바

목록 보기
7/19
post-thumbnail

개요

Java의 자료형은 크게 기본 자료형(Primitive Type)과 참조 자료형(Wrapper Type)을 나뉩니다. 오늘은 이 두 자료형에 대해 알아보도록 하겠습니다.

기본 자료형이란?

기본 자료형은 메모리에 직접 값을 저장하는 자료형을 말합니다. Java에서 제공하는 8가지 기본 자료형은 다음과 같습니다.


자료형 크기 기본값
boolean 1 bit false
byte 1 byte 0
short 2 byte 0
int 4 byte 0
long 8 byte 0L
float 4 byte 0.0f
double 8 byte 0.0d
char 2 byte \u0000

이에 대한 특징을 다음과 같습니다.

  • Stack 영역에 저장
  • 연산 속도가 빠르며, 불필요한 메모리 할당 방지
  • boolean은 1 bit 지만, JVM에서는 1 Byte 할당
  • 정수형(byte, short, int, long)은 오버플로우 조심
  • 실수형(float, double)은 부동소수점 연산 오차 발생

참조 자료형이란?

참조 자료형은 객체를 참조하는 방식으로 저장되는 자료형을 말합니다. Java는 기본 자료형을 객체로 감싸는 참조 자료형을 제공하는데, 이를 Wrapper 클래스라 하며 다음과 같습니다.


기본 자료형 참조 자료형
boolean Boolean
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character

이에 대한 특징은 다음과 같습니다.

  • 객체를 다룰 수 있음
    • 기본 자료형은 객체가 아니므로, 컬렉션에 저장 불가
    • Wrapper 클래스를 사용하여 객체로 변환 후 저장 가능
  • 유틸리티 메서드 제공
    • Wrapper 클래스는 형변환, 문자열 변환 기능 제공
  • Auto-Boxing과 Unboxing 지원
    • Auto-Boxing : 기본 자료형을 참조 자료형으로 변환하는 것
    • Unboxing : 참조 자료형을 기본 자료형으로 변환하는 것

왜, 두 개를 분리해서 사용할까?

두 자료형을 저장하는 방식의 차이

"기본 자료형은 메모리에 직접 저장되는 자료형이다."
"참조 자료형은 객체를 참조하는 방식으로 저장하는 자료형이다."

위는 두 자료형에 대한 정의입니다. 둘 다 결국 어떤 자료를 저장하는 목적은 동일하지만 저장하는 방식이 다른 것을 알 수 있습니다.

다음 그림과 같이 기본 자료형은 메모리에 직접 저장하기 때문에 데이터를 바로 조회할 수 있습니다. 반면, 참조 자료형은 데이터가 아닌 Heap 메모리에 할당된 객체를 참조하기 위한 주소값을 저장하고 있습니다. 또한, Heap에 객체를 할당하는 것은 GC의 대상이 되는 객체의 갯수를 증가시키는 것과 같습니다.

기본 자료형은 언제 사용할까?

기본 자료형은 메모리에 직접 값을 저장하며 이에 즉시 접근하여 값을 조회하는 방식으로 동작합니다. 즉, 참조 자료형보다 효율적으로 저장된 값을 사용하며 조회할 수 있습니다.

따라서, 다음과 같은 경우 기본 자료형을 사용하는 것이 적절합니다.

  • 단순 조회나 연산 로직이 빈번한 경우
  • 객체 생성을 최소화하는 경우
  • 초기값이 null이 필요없는 경우

이러한 이유로 인해, 기본 자료형은 연산 속도와 메모리 효율성이 중요한 경우 사용하는 것이 가장 적절합니다.

참조 자료형은 언제 사용할까?

참조 자료형은 Heap에 할당된 객체 주소값을 참조해서 저장된 값을 가져오는 방식으로 동작합니다. 즉, 같은 값 10이라도 서로 다른 객체로 생성되었다면 주소값이 다르므로 다른 값으로 판단될 수 있습니다.

또한, 메모리 주소를 저장하기 때문에 값이 할당되지 않은 경우 null을 저장할 수 있습니다. 이를 통해, 값이 없는 상태를 명확하게 표현할 수 있습니다.

따라서, 다음과 같은 경우 참고 자료형을 사용하는 것이 적절합니다.

  • 같은 값을 가지더라도 객체를 서로 다르게 취급해야 하는 경우
  • 값이 없는 상태를 명확하게 표현해야 하는 경우
  • 기본 자료형을 컬렉션(List, Map, Set)에 저장해야 하는 경우

이러한 이유로 인해, 참조 자료형은 객체 지향적인 설계가 필요한 경우나 값의 유무를 보다 정확하게 표현해야 할 때 사용하는 것이 가장 적절합니다.

기본 자료형은 왜 컬렉션에 저장할 수 없을까요?

Java의 제네릭은 기본 자료형을 지원하지 않기 때문입니다. 하지만, Java 8 이상에서는 기본 자료형을 효율적으로 다룰 수 있는 Primitive Stream과 같은 전용 자료구조를 제공합니다.

추가 학습이 필요한 내용

아래는 위 개념을 공부하면서 추가 학습이 필요할 것 같은 내용들입니다. 이 내용들은 차차 정리하여 링크를 달도록 하겠습니다.

객체의 동등성 비교

Generic

Java 8의 Primitive Stream 활용

예상 질문

기본 자료형과 참조 자료형의 차이는 무엇인가요?

두 자료형의 가장 큰 차이는 데이터를 저장하는 방식입니다. 기본 자료형의 경우 Stack 영역에 직접 저장하지만, 참조 자료형의 경우 Stack 영역에 참조 변수를 저장하여 Heap 메모리에 할당된 객체를 가르키는 주소를 저장합니다.

두 자료형은 언제 어떻게 사용하는게 좋을까요?

기본 자료형의 경우 단순 데이터 조회나 연산을 수행하는 경우나 메모리를 효율적으로 사용할 때 사용하는 것이 좋습니다. 참조 자료형의 경우 객체 지향적인 설계나 기본 자료형을 컬렉션 자료구조에 사용할 때 사용하는 것이 좋습니다.

Auto-Boxing과 Unboxing은 무엇인가요?

Auto-Boxing은 기본 자료형을 참조 자료형으로 바꾸는 작업이고, Unboxing은 참조 자료형을 기본 자료형으로 바꾸는 작업을 말합니다.

기본 자료형을 컬렉션 자료구조에 저장할 수 없나요? 왜 그런가요?

컬렉션 자료구조의 경우 Genric이라는 문법을 사용합니다. 해당 문법은 기본 자료형을 지원하지 않기 때문에 컬렉션 자료구조에 저장하기 위해선 참조 자료형을 사용해야 합니다. 이에 따라, Java 8 이상에서는 기본 자료형을 효율적으로 다룰 수 있는 Primitive Stream 같은 자료구조를 제공하고 있습니다.

profile
동료들의 시간과 노력을 더욱 빛내줄 수 있는 개발자가 되고자 노력합니다.

0개의 댓글