[Java] 문자(char)는 왜 정수처럼 동작할까?

seonwoo·2026년 2월 3일

Java

목록 보기
9/12

1. 문자는 왜 숫자로 처리되는가?

컴퓨터는 우리가 인식하는 문자 자체를 이해하지 못한다.
컴퓨터가 처리할 수 있는 것은 전기 신호의 상태
즉, 0과 1로 구성된 2진법의 숫자 정보뿐이다.

우리가 키보드로 'A'를 입력하면
컴퓨터는 이것을 문자 그 자체 'A' 로 인식하는 것이 아니라
특정 숫자 값으로 변환된 데이터로 받아들인다.

즉, 사람의 관점에서는 다음과 같지만

'A' -> 문자

컴퓨터 내부에서는 다음 과정을 거친다.

'A' -> 숫자 -> 2진수

1-1. 문자를 숫자로 바꾸는 규칙이 필요한 이유

만약 문자와 숫자 사이에 공통된 규칙이 없다면
컴퓨터는 문자를 저장하거나 전달하거나 비교할 수 없다.

  • 파일에 문자를 저장했다가 다시 읽는 것
  • 서로 다른 컴퓨터 간에 문자를 주고받는 것
  • 문자열을 비교하거나 정렬하는 것

이 모든 작업이 불가능해진다.

그래서 등장한 개념이
문자 인코딩(character encoding) 이다.





2. ASCII & Unicode

문자 인코딩은 문자를 숫자에 대응시키는 공통 규칙이며
이 덕분에 컴퓨터는 문자를 저장하고 처리할 수 있다.

대표적인 문자 인코딩 방식으로는
ASCII와 Unicode가 있다.


2-1. ASCII (American Standard Code for Information Interchange)

ASCII는 가장 오래되고 단순한 문자 인코딩 방식이다.
영문 알파벳, 숫자, 일부 특수문자를 0부터 127까지의 숫자에 대응시킨다.

예를 들면 다음과 같다.

'A' -> 65
'B' -> 66
'a' -> 97
'0' -> 48

이처럼 문자를 숫자로 매핑함으로써
컴퓨터는 문자를 저장하고, 비교하고, 연산할 수 있게 된다.

다만 ASCII는

  • 영어 알파벳
  • 숫자
  • 일부 기호

다음과 같이 제한적으로 표현할 수 있기 때문에,
한글이나 다른 언어의 문자는 표현할 수 없다는 한계가 있다.

2-2. Unicode

ASCII의 한계를 해결하기 위해 등장한 것이 Unicode다.

Unicode는 특정 언어나 환경에 제한되지 않고
전 세계의 문자를 하나의 체계로 표현하기 위한 인코딩 규칙이다.

중요한 점은 다음과 같다.

  • ASCII는 Unicode에 그대로 포함된다
  • 'A', '0' 같은 문자의 숫자 값은 ASCII와 Unicode 둘 다 동일하다

즉, Unicode는
ASCII를 확장한 상위 호환 문자 체계라고 볼 수 있다.





3. Java에서 char 타입이 정수처럼 동작하는 이유

Java는 내부적으로 Unicode를 기반으로 문자를 처리한다.

Java의 char 타입은 Unicode 문자를 표현하기 위한 타입으로
내부적으로는 Unicode 숫자 값을 저장한다.

즉, Java에서 문자를 다룬다는 것은
결국 Unicode 코드값이라는 숫자를 다루는 것과 같다.

이 점 때문에
Java의 char 타입은
문자처럼 보이지만 정수처럼 동작하는 성질을 갖게 된다.

char c = 'A';
int n = c;

System.out.println(c); // A
System.out.println(n); // 65

이 코드에서
c에 저장되는 것은 'A'라는 문자 그 자체가 아니라
'A'에 해당하는 Unicode 숫자 값(65)이다.

따라서 char 타입은
문자처럼 보이지만
정수 타입처럼 형변환과 연산이 가능하다.



3-1. char → int 자동 형변환

char c = 'A';
int n = c;

System.out.println(n); // 65

char는 내부적으로 숫자 값을 저장하고 있기 때문에
상위 타입인 int 타입으로 명시적인 캐스팅 없이 자동 형변환이 가능하다.

이 과정에서
문자 'A'는
정수 값 65로 그대로 해석된다.



3-2. char 데이터 타입의 산술 연산

char c = 'A';

System.out.println(c + 1);         // 66
System.out.println((char)(c + 1)); // B

이 연산은
문자를 더하는 것이 아니라
다음과 같은 정수 연산으로 처리된다.

'A'65
65 + 166
66'B'

c + 1 연산이 가능한 이유는
산술 연산이 수행될 때
Java가 char 값을 먼저 정수 타입으로 변환하기 때문이다.

Java에서 산술 연산자는
byte, short, char 타입을 그대로 사용하지 않고,
모두 int 타입으로 변환한 뒤 연산을 수행한다.



3-3. 문자끼리의 연산

char c1 = 'A';
char c2 = 'B';

int result = c1 + c2;
System.out.println(result); // 131

Java는 이 코드를 다음과 같이 처리한다.

'A'65
'B'66
65 + 66131

문자끼리 더하는 연산 역시
유니코드 숫자 값의 덧셈으로 처리된다.



profile
Github : https://github.com/melly8954

0개의 댓글