Ch 01. 자바 기초 - 08. 자료형(data type) - 문자는 프로그램에서 어떻게 표현하여 사용하나요?
문자 인코딩이 어떻게 만들어져 있는지 알아보도록 하자.
a라는 문자를 컴퓨터로 어떻게 표현할 것이냐 하면 어떤 특정한 숫자로 표현을 하자고 약속함.
그 숫자가 우리가 약속한 값이 됨. 그 값을 내가 컴퓨터 안에 비트로 표현을 하게 되면 a라고 나오게 됨
그 약속을 한 것들을 문자 세트라고 함. - 약속이 되어있는 것 들이 있음 (ex. ASKII, euc-kr, utf-8, utf-16)
a의 askii 코드는 65이다 . askii 코드는 8비트로 되어있음 2의 8승을 256임. 알파벳 52개 특수문자 등등 해도 1바이트로 표현할 수 있음
a가 65로 바뀌는 과정을 인코딩이라고 하며 65인 값이 a로 바뀌는 과정을 디코딩이라고 함
자바에서는 문자가 어떻게 표현되나요?
세계에서는 영어만 쓰는 것이 아니기 때문에 다른 각자의 나라에 맞는 문자세트가 만들어졌는데 우리는 euc-kr을 사용
그래서 각자 다른 문자세트를 사용하게 되면 호환이 되지 않는데 그걸 하나의 코드표로 표준을 하자고 한 것이 unicode임.
unicode에 대한 문자 세트 종류는 크게 두가지가 있는게 그게 utf-8, utf-16임
utf-16을 기준으로 하면 2바이트를 사용하는데(16비트-2의 16승까지 표현 가능함) 각 나라마다 코드표를 줌
한 바이트는 askii와 완벽하게 호환이 됨 - > 따라서 unicode는 askii와 호환이 됨
euc-kr도 마찬가지인데, 멀티바이트로 쓰게되면 한 바이트만 쓰는 경우에는 아스키와 호환이 되고 두 바이트를 사용할 떄는 다른 언어들을 같이 표현해서 씀.
utf-8, utf-16의 차이
utf-16 : 모든 문자를 2바이트로 표현을 함
utf-8 : 1바이트에서 4바이트까지 유동적으로 표현함
askii같은 경우 영문만을 쓴다 하면 2바이트를 하면 오버헤드가 됨 : 바이트가 두배가 됨
인터넷이나 네트워크 통신을 할 때는 좀 더 효율적으로 유동적인 바이트를 사용하기 때문에 utf-8을 더 많이 씀 :
문자형 변수 선언과 사용하기
package ch08;
public class CharacterTest {
public static void main(String[] args) {
char ch1 = 'A';
System.out.println(ch1);
System.out.println((int)ch1);
char ch2 = 66;
System.out.println(ch2);
int ch3 = 67;
System.out.println(ch3);
System.out.println((char)ch3);
//char ch4 = -66; 음수는 대입 할 수 없음
char ch5 = '한';
char ch6 = '\uD55C';
System.out.println(ch5);
System.out.println(ch6);
}
}
- 문자를 위한 데이터 타입 char ch = 'A';
- 내부적으로 숫자료 표현되므로 숫자를 넣어도 문자가 출력될 수 있음
문자를 쓸 때는 싱글 따옴표를 쓰는데
큰 따옴표를 사용하는 것과는 매우 다른 일임.
' '는 문자를 나타내는 2바이트
" "(더블 코테이션)는 문자열이라고 얘기함. string. "A"는 A만 나타나는 것이 아니라 문자열의 끝을 나타내는 null캐릭터도 같이 들어감. (A0)
그렇기 때문에 char ch = 'A'; 라고 선언하면 됨.
프로그램에선 문자로 되어있지만 실제로 컴퓨터 안에서는 숫자로 되어있음..
char의 경우 숫자로도 쓸 수 있고 문자로도 쓸 수 있음
양수만 쓸 수 있고 음수는 쓸 수 없음.
참고
character set: 문자를 숫자로 변환한 값의 세트
encoding: 문자가 숫자로 변환되는 것
decoding: 숫자에서 다시 문자로 변환되는 것
ASKII code: 알파벳과 숫자 특수 문자등을 1바이트에 표현하는데 사용하는 문자세트
UNICODE: 전 세계 표준으로 만든 문자 세트
UTF-8: 1바이트에서 4바이트까지 다양하게 문자를 표현할 수 있음
UTF-16: 2바이트로 문자를 표현