1. 논리형 - boolean
논리형에는 'boolean' 한 가지밖에 없으며, true와 false 중 하나를 저장할 수 있다. 기본값(default)은 false이다.
boolean power = true;
boolean checked = False; // 에러. 대소문자가 구분됨.
boolean형 변수는 대답(yes/no), 스위치(on/off) 등의 논리 구현에 주로 사용된다.
boolean형은 true와 false, 두 가지의 값만 표현하면 되므로 1bit로 충분하지만 자바에서는 데이터를 다루는 최소 단위가 byte이기 때문에 boolean의 크기는 1byte이다.
2. 문자형 - char
문자형도 'char' 한 가지 자료형 밖에 없다. char 타입의 변수는 단 하나의 문자만을 저장할 수 있다.
char ch = 'A'; // 문자 'A'를 char 타입의 변수 ch에 저장
위의 문장은 변수에 '문자'가 저장되는 것 같지만, 문자가 아닌 '문자의 유니코드(정수)'가 저장된다. 문자 'A'의 유니코드는 65이므로, 변수 ch에는 65가 저장된다.
char ch = '\uAC02'; // char ch = 65;
int code = (int)ch; // ch에 저장된 값을 int타입으로 변환하여 저장한다.
System.out.printf("%c=%d(%#X)%n",ch, code, code);
char hch = '힣';
System.out.printf("%c=%d(%#X)%n",hch, (int)hch, (int)hch);
특수 문자 다루기(=예외 문자, excape char)
영문자 이외에 tab이나 backspace 등의 특수문자를 저장하려면, 아래와 같은 방법을 써야 한다.
특수 문자 | 문자 리터럴 |
tab | \t |
backspace | \b |
form feed ← 거의 사용하지 않음 | \f |
new line | \n |
carriage return | \r |
역슬래쉬(₩) | \\ |
작은따옴표 | \‘ |
큰따옴표 | \“ |
유니코드(16진수)문자 | \u유니코드 (예: char a = '\u0041') |
char 타입의 표현 형식
char 타입의 크기는 2byte(=16bit)로, 2^16(=65536)개의 코드를 사용할 수 있다. 예를 들어, 문자 'A'를 저장하면, 2진수 '0000000001000001'(10진수로 65)로 저장된다.
char 타입의 변수에는 문자가 아닌 '문자의 유니코드(정수)'가 저장되고 표현 형식 역시 정수와 동일하다. 다만, 정수형과 달리 음수를 나타낼 필요가 없으므로 표현할 수 있는 값의 범위가 다르다.
16비트로 표현할 수 있는 정수의 개수 : 2^16개(65536개)
short 타입의 표현 범위 : -2^15 ~ 2^15-1 (-32768 ~ 32767)
char 타입의 표현 범위 : 0 ~ 2^16-1 (0 ~ 65535)
다음과 같이 변수 'ch'와 's'에 'A'와 '65'를 저장하면 둘 다 2진수로 똑같은 값이 저장된다. 그러나 두 변수의 출력의 결과는 다르게 나온다.
char ch = 'A'; // char ch = 65;
short s = 65;
println()은 변수의 타입이 정수형이면 변수에 저장된 값을 10진수로 해석하여 출력하고, 문자형이면 저장된 숫자에 해당하는 유니코드 문자를 출력하기 때문이다.
- char 타입 변수 활용해보기
char ch = '\uAC02'; // char ch = 65;
int code = (int)ch; // ch에 저장된 값을 int타입으로 변환하여 저장한다.
System.out.printf("%c=%d(%#X)%n",ch, code, code);
char hch = '힣';
System.out.printf("%c=%d(%#X)%n",hch, (int)hch, (int)hch);
참고문헌 : 남궁성(2016), Java의 정석, 도우출판