[Java] 원시 타입과 참조 타입의 차이 / 데이터 타입 / 리터럴

2026. 3. 16. 17:34·Java

원시 타입과 참조 타입의 차이

 

1. 원시 타입(Primitive Type, 원시 타입 또는 기본형 타입)

특징

  • 실제 데이터 값을 직접 저장 메모리 공간(Stack 메모리)에 10이나 ‘A’ 같은 실제 값을 저장
  • 메모리 크기 고정
  • 비어있는 상태(null)를 가질 수 없음 null 값 X → 값을 지정하지 않으면 0 이나 false 같은 기본값이 자동 저장

종류

  1. 숫자형:
    1. 정수형: byte(1), short(2), int(4), long(8)long보다 큰 범위면 실수로 쓰거나 객체 생성
    2. → 연산할 때 기본형인 int로 자동 변환되기에 byte, short는 잘 안 씀
    3. 실수형: float(4), double(8) float v = 3.14; 는 오류 남! → 더 큰 double값을 작은 float형에 넣으려고 해서
    4. → 기본형은 double, 숫자 뒤에 f 붙여야 float
  2. 문자형: char(2) → 널값 허용 X ‘’은 오류
  3. 논리형: boolean(크기 X) → true나 false만

 

2. 참조 타입(Reference Type)

: 이름 그대로 값을 직접 가지는 게 아니라, 값이 있는 곳의 주소(위치)를 참조함

예) String, 배열, 클래스(Class, 객체) 등

문자열은 String으로 대문자인 이유도 객체이기 때문(정의된 기본 타입이 아니라 생성된 객체)

 

특징

  • 실제 값은 딴 곳에, 변수에는 주소만 저장 기본형 타입은 변수 메모리(Stack 메모리)에 실제 값을 저장 하지만 참조 타입은 데이터 크기가 가변적이기에, 아주 큰 Heap 메모리에 실제 데이터를 보관 / Stack 메모리에는 주소만 저장
  • null 값 O null = 주소 없다는 의미 → 이때 주소 없이 접근하려고 하면 NullPointerException 에러 발생
  • == 연산자로 비교할 때 주의 기본형 타입끼리 == 로 값을 비교, 하지만 참조 타입끼리 ==로 주소를 비교, .equals() 쓰면 값을 비교

리터럴

: 변수에 넣는 변하지 않는 데이터 값 그 자체

  1. 100(정수형 리터럴), 3.14(실수형 리터럴), true, false(논리형 리터럴)
  2. ‘A’(문자형 리터럴 → 문자는 1글자여야 함 ‘AB’는 오류)
  3. “”, “AB”(문자열 리터럴→ 0개 이상이면 가능함)
  4. ‘1’ + 1 → 49 + 1로 50(11아님) → 정수 규칙
  5. “1” + 1 → “11” → 문자열 규칙
  6. 이러한 규칙은 **문자열 > 실수 > 정수 순으로 데이터 손실을 막을 수 있는가(**데이터의 표현 범위가 더 넓은가)를 기준으로 서열이 정해짐
  7. 아스키코드: 0(48), A(65), a(97)

실습 내용

출력에서 리터럴 사용

System.out.print(변수명) → 변수 출력

System.out.print(”변수명”) 리터럴로 출력 → “변수명” 문자열로 출력

System.out.println(777777777L);은 long형 리터럴 사용

여기서 L을 빼면 int형 리터럴이 되지만 저 숫자는 int 범위를 벗어나기에 에러남!

 

r-value와 l-value이란?

int num = 10;

System.out.println(num);

이때, 출력되는 건 num의 값!

변수의 사용 시 값을 사용하는 경우엔 r-value, 방을 사용하는 경우엔 l-value

변수 = 식(리터럴, 변수, 연산식, 리턴 값이 있는 메서드의 호출 식)

왼쪽 변수는 방, 오른쪽 식은 값

r-value 용도를 쓸 때는 항상 초기화 필수!(값이 있어야 하기에)

변수 사용

: 중복되는 식을 제거하고 효율적으로 사용하기 위해

변수를 선언해두고 사용하지 않으면 메모리 낭비로 비효율!

문자형에 정수를 넣으면?

char v1 = 65;

System.out.println(v1); → A 출력(char에 정수를 넣었기 때문에 char로 자동 형변환)

char result = (char)('(' + ')'); → int보다 작은 타입을 연산하면 int로 변환되기에 char로 변환 후 저장

→ ‘(’의 아스키 코드 값 40이기에 result엔 40+41의 아스키 코드인 Q 출력

따라서 문자형과 같이 int보다 작은 타입에 연산식을 대입할 땐 int로 자동 변환 → 담을 수 없어서 오류!

그래서 형변환 필수임!!

저작자표시 (새창열림)

'Java' 카테고리의 다른 글

[Java] 제어문-if, switch / 반복문-for, while / 랜덤 함수 사용법 / final  (4) 2026.03.17
[Java] 연산자 종류 / 참조 연산자 / instanceof / 논리 연산자 / 오류 주의  (0) 2026.03.17
[Do it! 알고리즘 코딩 테스트 자바] 그리디 알고리즘, 소수 구하기, 유클리드 호제법, 그래프 [13~18일차]  (1) 2026.03.15
[Do it! 알고리즘 코딩 테스트 자바] 이진 탐색 (12일차)  (0) 2026.03.08
[Do it! 알고리즘 코딩 테스트 자바] BFS 너비 우선 탐색 - 백준 1260(11일차)  (0) 2026.03.08
'Java' 카테고리의 다른 글
  • [Java] 제어문-if, switch / 반복문-for, while / 랜덤 함수 사용법 / final
  • [Java] 연산자 종류 / 참조 연산자 / instanceof / 논리 연산자 / 오류 주의
  • [Do it! 알고리즘 코딩 테스트 자바] 그리디 알고리즘, 소수 구하기, 유클리드 호제법, 그래프 [13~18일차]
  • [Do it! 알고리즘 코딩 테스트 자바] 이진 탐색 (12일차)
미우딩
미우딩
다양한 프로그래밍 언어를 공부하고 있는 공대생입니다! Python, Java, C언어를 주로 공부하고 있으며 Figma를 통한 디자인도 종종 올릴 예정입니다.
  • 미우딩
    미우의 코딩 기록
    미우딩
  • 전체
    오늘
    어제
    • 분류 전체보기 (60)
      • Java (47)
      • C언어 (0)
      • 대외활동 (5)
      • Spring (4)
      • 프로젝트 (2)
      • 앱개발 (0)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    BufferedReader
    IT #코딩테스트 #알고리즘 #슬라이딩윈도우 #투포인터 #함수
    IT #코딩테스트 #알고리즘 #버블정렬 #오름차순
    android #java #kotlin #compose
    push #pop #StringBuffer
    IT #알고리즘 #코딩테스트 #퀵정렬 #오름차순정렬
    IT #알고리즘 #코딩테스트 #선택정렬 #내림차순정렬 #최댓값
    IT #BFS #코딩테스트 #구현 #큐 #재귀함수
    IT #코딩테스트 #알고리즘 #투포인터 #시간제한 #Scanner #BufferedReader #StringTokenizer
    java #android #개발자
    IT #알고리즘 #코딩테스트 #DFS
    IT #큐 #알고리즘 #코딩테스트 #자바 #선입선출
    IT #코딩테스트 #알고리즘 #백준 #투포인터 #배열
    IT #코딩테스트 #알고리즘 #DFS #재귀함수 #무방향그래프
    IT #코딩테스트 #알고리즘 #스택 #
    IT #코딩테스트 #이진탐색 #알고리즘
    IT #백준 #알고리즘 #코딩테스트 #배열 #형변환 #아스키코드
    IT #알고리즘 #그리디알고리즘 #탐욕알고리즘 #코테
    IT #알고리즘 #코딩테스트 #우선순위큐 #힙 #절댓값 #오름차순 #정렬
    IT #백준 #코딩테스트 #알고리즘 #구간합 #반복문
    IT #백준 #알고리즘 #코딩테스트 #배열 #형변환 #평균구하기
    Spring #정적컨텐츠 #MVC #템플릿엔진 #API #애너테이션
    IT #알고리즘 #코딩테스트 #삽입정렬 #오름차순정렬
    android #java #kotlin #상태관리
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
미우딩
[Java] 원시 타입과 참조 타입의 차이 / 데이터 타입 / 리터럴
상단으로

티스토리툴바