2026년 02월 21일

🔤 Java에서 문자는 어떻게 저장될까?

Java Spring Boot
Cover Image

🔤 Java에서 문자는 어떻게 저장될까?

— char 타입과 유니코드(Unicode) 완전 정복

핵심 요약: Java에서 문자는 내부적으로 숫자(유니코드) 로 저장된다.
char 타입은 문자처럼 보이지만, 실제로는 정수 타입이다.


1️⃣ 문자 리터럴과 유니코드

문자 리터럴은 작은따옴표(')로 감싼 단 하나의 문자다.

char c = 'A';  // ← 이것이 문자 리터럴

Java는 문자를 저장할 때 유니코드(Unicode) 로 변환해 저장한다.

💡 유니코드(Unicode)란?
전 세계 모든 문자를 하나의 숫자 체계로 표현하기 위한 국제 표준 규약이다.
영문자부터 한글, 한자, 이모지까지 각 문자마다 고유 번호가 부여되어 있다.
char 타입은 0 ~ 65,535 범위의 유니코드 값을 저장한다.

'A'  → 유니코드 65     → 메모리에 65 저장
'가' → 유니코드 44032  → 메모리에 44032 저장

2️⃣ char는 정수 타입이다

유니코드가 정수이므로 char 타입도 정수 타입에 속한다.
따라서 문자뿐만 아니라 유니코드 숫자를 직접 대입할 수도 있다.

char c1 = 'A';      // 문자 리터럴로 대입
char c2 = 65;       // 10진수 유니코드로 대입
char c3 = 0x0041;   // 16진수 유니코드로 대입

// c1, c2, c3 모두 'A'를 출력

주요 문자 유니코드 값

문자유니코드 (10진수)유니코드 (16진수)
A650x0041
Z900x005A
a970x0061
z1220x007A
0480x0030
440320xAC00
552030xD7A3
(공백)320x0020

💡 활용 팁: 영문 대소문자의 유니코드 차이는 정확히 32다.
'A'(65) + 32 = 'a'(97) → 이를 이용해 대소문자 변환 연산도 가능하다.


3️⃣ char 타입 사용 예시

char c1 = 'A';      // 문자 리터럴
char c2 = 65;       // 유니코드 숫자 직접 대입
char c3 = '가';     // 한글 문자
char c4 = 44032;    // 한글 유니코드 직접 대입

System.out.println(c1);  // A
System.out.println(c2);  // A
System.out.println(c3);  // 가
System.out.println(c4);  // 가

// char를 int로 캐스팅하면 유니코드 숫자를 확인할 수 있다
System.out.println((int) 'A');   // 65
System.out.println((int) '가');  // 44032

4️⃣ ⚠️ 주의사항

빈 문자('')는 컴파일 에러

char c = '';   // ❌ 컴파일 에러: Invalid character constant
char c = ' ';  // ✅ 공백 문자(유니코드 32)로 초기화

char 타입은 반드시 하나의 문자 또는 유니코드 숫자를 가져야 한다.
단순 초기화가 목적이라면 공백 문자(' ') 를 사용한다.

char 타입의 산술 연산 주의

char c = 'A';
System.out.println(c + 1);    // ❌ 출력: 66 (int로 자동 변환됨)
System.out.println((char)(c + 1)); // ✅ 출력: B

char에 산술 연산을 수행하면 결과가 int 타입으로 자동 변환(프로모션) 된다.
문자로 출력하려면 반드시 (char)로 캐스팅해야 한다.


5️⃣ String과 char의 차이

구분charString
타입기본 타입 (Primitive)참조 타입 (Reference)
저장 단위문자 1개문자 0개 이상
리터럴작은따옴표 'A'큰따옴표 "Hello"
빈 값' ' (공백 필수)"" (빈 문자열 가능)
메모리Stack에 직접 저장Heap에 객체로 저장
char   c = 'A';        // 문자 1개, Stack 저장
String s = "Hello";    // 문자열, Heap 저장
String empty = "";     // 빈 문자열 가능
char   blank = ' ';    // 공백 문자로 초기화

6️⃣ 핵심 정리

문자 리터럴 → 유니코드(정수) 변환 → char 타입(2byte)에 저장
   'A'   →       65       →        메모리에 65 보관
개념한 줄 요약
문자 리터럴작은따옴표로 감싼 문자 하나 'A'
유니코드전 세계 문자를 0~65535 숫자로 매핑한 표준
char 타입2byte, 정수 타입, 유니코드 값 저장
빈 char'' 불가 → 반드시 ' '(공백) 사용
산술 연산결과가 int로 변환 → 문자 출력 시 (char) 캐스팅 필요
← 목록으로 돌아가기