문자자료형도 다른자료형과 같이 내부적으로 비트의 조합으로 저장을 하는데 각 문자의 특정한 숫자값을 부여하여 저장합니다.
각 문자를 저장 할 때 숫자화 하는 것을 '인코딩'이라고 하고 숫자화된 자료를 문자화 하는 것을 '디코딩' 이라고 합니다.
ex) 'A' -> 65, // 인코딩
65 -> 'A' // 디코딩
문자세트는 문자를 어떤 숫자(코드값)으로 저장할 것인가를 정해놓은 세트입니다. ('A' -> 65 'B' ->66)
아스키는 문자를 1바이트로 표현하는 문자세트로 영어는 가능하지만 외국어는 적용이 어려운 문자세트입니다.
유니코드는그래서 나온 문자세트로 멀티바이트를 지원합니다. UTF-8 UTF-16이 대표적인 유니코드 문자세트 입니다.
public class CharTest {
public static void main(String[] args) {
char ch = 'A';
System.out.println(ch); // A
System.out.println((int)ch); // 65
int iCh = 66;
System.out.println(iCh); // 66
System.out.println((char)iCh); //B
// char ch2 = -66;
char hangul = '\uAC00';
System.out.println(hangul); // 가
}
}
위에 코드에서 알 수 있듯이 ch(문자 자료형)는 (int)로 캐스팅할 시 숫자로 변환이 가능하고('A' => 65) 반대의 경우도 가능합니다(66 => 'B'). 문자 세트에서는 양수만 사용되기 때문에 -66같은 음수값은 문자 자료형에 들어갈 수 없습니다.
마지막 char hangul = '\uAc00'; 코드 처럼 유니코드를 직접 입력하여서 한글 문자를 출력할 수도 있습니다.(유니코드를 입력할때는 \u를 사용합니다.)