[Java의 정석] 문자형 - char (1)

말하는 감자·2023년 10월 28일
0

Java의 정석

목록 보기
17/32
post-thumbnail

Chapter 02 변수(Varialbe)

4. 기본형(primitive type)

📌 문자형 - char

문자형은 char 한 가지 자료형밖에 없다.
문자를 저장하기 위한 변수를 선언할 때 사용되며, char타입의 변수는 단 하나의 문자만을 저장할 수 잇다.

char ch = 'A'; // 문자 'A'를 char타입의 변수 ch에 저장.

변수에 '문자'가 저장되는 것 같지만, 사실은 문자가 아닌 '문자의 유니코드(정수)'가 저장된다.
컴퓨터는 숫자밖에 모르기 때문에 모든 데이터를 숫자로 변환하여 저장하는 것이다.
문자 'A'의 유니코드는 65이므로, 변수 ch에는 65가 저장된다.

그래서 문자 리터럴 대신 무자의 유니코드를 직접 저장할 수도 있다.
문자 'A'의 유니코드는 10진수로 65이며, 아래의 두 문장은 동일한 결고를 얻는다.

char ch = 'A'; // 문자 'A'를 char타입의 변수 ch에 저장.
char ch = 65;  // 문자의 코드를 직접 변수 ch에 저장.

만일 어떤 문자의 유니코드를 알고 싶으면, char형 변수에 저장된 값을 정수형(int)으로 변환하면 된다.

int code = (int)ch; // ch에 저장된 값을 int타입으로 변화하여 저장한다.

어떤 타입(type, 형)을 다른 타입으로 변화하는 것을 형변화(캐스팅, casting)이라고 한다.

📍 특수 문자 다루기

영문자 이외에 tab이나 backspace 등의 특수문자를 저장하려면, 다음과 같은 방법을 사용한다.

char tab = '\t'; // 변수 tab에 탭 문자를 저장

\tab는 실제로 두 문자로 이루어져 있지만 한 문자(탭, tab)를 의미한다.

📍 char타입의 표현형식

char타입의 크기는 2 byte(=16 bit)이므로, 16자리의 2진수로 표현할 수 있는 정수의 개수인 65536개(=2^16)의 코드를 사용할 수 있으며, char형 변수는 이 범위 내의 코드 중 하나를 저장할 수 있다. 예를 들어, 문자 'A'를 저장하면, 2진수 '0000000001000001'(10진수로 65)로 저장된다.

char타입은 문자가 아닌 '문자의 유니코드(정수)'가 저장되고 표현형식 역시 정수형과 동일하다.
다만, 정수형과 달리 음수를 나타낼 필요가 없으므로 표현할 수 있는 값의 범위가 다르다.
2 byte(=16 bit)로는 모두 2^16(=65536)개의 값을 표현할 수 있는데, char타입에 저장되는 값인 유니코드는 모두 양수(0 포함)이므로, '0~65535'의 범위를 가지며, 정수형인 short은 벌반을 음수표현에 사용하므로 '-32768~32768'을 범위로 갖는다.

char ch = 'A' // char ch = 65;
short s = 65;

변수 chs에 'A'와 65를 저장하면, 둘 다 2진수로 똑같은 값이 저장된다. 컴퓨터는 모든 값을 0과 1로 저장하기 때문이다.

System.out.println(ch); // A가 출력된다.
System.out.println(s);  // 65가 출력된다.

그런데도 두 변수의 값을 출력해보면 결과가 다르다.
println()은 변수의 타입이 정수형이면 변수에 저장된 값을 10진수로 해석하여 출력하고, 문자형이면 저장된 숫자에 해당하는 유니코드 문자를 출력하기 때문이다.

이처럼 값을 어떻게 해석하느냐에 따라 결과가 달라지므로 값만으로는 값을 해석할 수 없다. 값의 타입까지 알아야 올바르게 해석할 수 있는 것이다.


📑 원본 자료

  • Java의 정석(3판) [남궁 성/도우출판/2016]
profile
나는 말하는 감자다

0개의 댓글