[Java] Primitive type(원시타입) vs. Reference type(참조타입)

2025. 8. 30. 17:43·Java

Java를 처음 배우면 가장 많이 헷갈리는 부분 중 하나가

바로 기본 자료형(Primitive Type)과 참조 자료형(Reference Type) 이다.
두 자료형은 메모리에 저장되는 방식부터 다르며, 코드에서 사용하는 방법도 크게 차이가 있다.


1. 기본 자료형 (Primitive Type)

📌 특징

  • 자바에서 가장 기본이 되는 데이터 타입
  • 변수에 값 자체가 저장됨 → 스택(Stack) 메모리에 저장
  • 미리 정해진 크기와 형태를 가지며, 객체가 아님 → null 저장 불가
  • 연산이 빠르고 메모리 사용이 효율적임

📋 종류 (총 8가지)

종류 자료형 크기 기본값 예시

논리형 boolean 1bit (JVM마다 다를 수 있음) false true, false
문자형 char 2byte (유니코드) '\u0000' 'A', '가'
정수형 byte 1byte 0 127, -128
  short 2byte 0 1000
  int 4byte 0 100000
  long 8byte 0L 10000000000L
실수형 float 4byte 0.0f 3.14f
  double 8byte 0.0d 3.141592

 

👉 예시 코드

int age = 25;       // 값 자체가 저장됨
double pi = 3.14;   // 소수 저장
boolean isTrue = true;

2. 참조 자료형 (Reference Type)

📌 특징

  • 객체(Object)의 주소값을 저장하는 타입
  • 실제 데이터는 힙(Heap) 영역에 저장되고, 변수에는 그 데이터가 저장된 메모리 주소를 참조
  • null 저장 가능 (즉, 아무 객체도 참조하지 않음)
  • 기본 자료형을 제외한 모든 타입이 참조 자료형임

📋 종류

  1. 클래스 (ex. String, Scanner, 사용자 정의 클래스)
  2. 인터페이스
  3. 배열 (int[], String[])
  4. 열거형 (enum)

👉 예시 코드

String name = "Java";   // 실제 "Java"는 Heap에 저장되고, name 변수는 그 주소를 참조
int[] numbers = {1, 2, 3}; // 배열 역시 참조 자료형

3. 기본 자료형 vs 참조 자료형 비교

구분 기본 자료형 참조 자료형

저장 방식 값 자체 저장 객체의 주소값 저장
저장 위치 스택(Stack) 힙(Heap)
크기 고정 가변적
null 허용 여부 불가능 가능
예시 int, double, boolean String, ArrayList, int[]

4. 자주 헷갈리는 부분: Wrapper 클래스

기본 자료형을 객체처럼 다루기 위해 자바에서는 Wrapper 클래스를 제공한다.
예를 들어, int → Integer, double → Double 형태로 사용 가능하며, 컬렉션 프레임워크 등 객체만 저장할 수 있는 자료구조에서 활용된다.

int a = 10;               // 기본 자료형
Integer b = Integer.valueOf(10); // 참조 자료형 (Wrapper)

마무리

  • 기본 자료형은 단순하고 빠르게 값을 저장하는 방식
  • 참조 자료형은 객체와 관련된 다양한 기능을 제공하는 방식
  • 자바에서는 상황에 맞게 두 가지 자료형을 적절히 섞어서 사용해야한다.

👉 초보자라면 변수 선언 시 내가 값 자체를 저장하려는지, 객체를 다루려는지부터 구분하는 습관을 들이면 큰 도움이 됩니다.

 

참조 자료형 예시

'Java' 카테고리의 다른 글

[Java] 클래스 메소드(static 메소드) vs 인스턴스 메소드  (0) 2025.10.03
[Java] 기본형 매개변수와 참조형 매개변수  (0) 2025.10.03
[Java] 진법 변환 정리 (n진수 <-> 10진수)  (0) 2025.08.30
[Java] Integer.valueOf()와 Integer.parseInt()의 차이  (1) 2025.08.20
[Java] Scanner vs BufferedReader 비교해보자  (2) 2025.07.15
'Java' 카테고리의 다른 글
  • [Java] 클래스 메소드(static 메소드) vs 인스턴스 메소드
  • [Java] 기본형 매개변수와 참조형 매개변수
  • [Java] 진법 변환 정리 (n진수 <-> 10진수)
  • [Java] Integer.valueOf()와 Integer.parseInt()의 차이
싹난 감자🥔🌱
싹난 감자🥔🌱
개발 블로그
  • 싹난 감자🥔🌱
    감자에 싹이나서 잎이나서
    싹난 감자🥔🌱
  • 전체
    오늘
    어제
    • 분류 전체보기 (44) N
      • Spring (3)
      • Java (17)
      • LLM (1)
      • DevOps (4)
      • Algorithm (14)
        • 백준 (4)
        • 프로그래머스 (0)
        • 코드업 (10)
      • Computer Science (3)
        • Operating System (2)
        • Computer Architecture (1)
      • Trouble Shooting 🚀 (0)
      • 회고 & 성장기록 (2) N
      • 설계 📐 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    코딩테스트
    알고리즘입력
    BufferedReader
    자바BufferedReader
    자바 입력
    2차원 배열
    자바성능
    배포
    구간합
    docker
    자바Scanner비교
    2진수
    Java
    Scanner
    비트
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
싹난 감자🥔🌱
[Java] Primitive type(원시타입) vs. Reference type(참조타입)
상단으로

티스토리툴바