반응형
이번 포스팅에서는 자바(Java)의 자료형 중 하나인 문자 자료형에 대하여 공부를 해보고자 한다.
문자 자료형
컴퓨터는 0과 1로만 표현할 수 있기 때문에 문자 역시 컴퓨터 내부에서 표현할 때 0과 1의 조합으로 나타내야 한다.
따라서 어떤 문자를 컴퓨터 내부에서 표현하려면 특정 정수 값으로 정하고자 약속한다.
문자를 정해진 코드 값으로 변환하는 것을 "문자 인코딩", 코드값을 다시 문자로 변환하는 것을"문자 디코딩"이라고 한다.
아스키(ASCII) 코드
가장 기본이 되는 문자 인코딩은 아스키(ASCII) 코드이다..
영문자는 대문자, 소문자, 특수문자, 기호를 포함해도 1바이트(2^8 = 256개)로 표현할 수 있기 때문에 아스키코드는 1바이트만 사용한다.
하지만 한글 등 다른 언어 문자는 복잡하고 다양하기 때문에 1바이트만으로 모든 문자를 표현하기 어렵다.
유니 코드
유니코드란 전 세계의 모든 문자를 처리할 수 있도록 만든 표준 문자 전산 처리 방식이다.
모든 문자를 표현하려면 2바이트 이상을 사용하게 되는데, 이때 각 언어의 표준 인코딩을 정의해 놓은 것이 "유니 코드"이다..
유니코드의 1바이트는 아스키코드 값과 호환되고, 그 밖의 문자를 2바이트나 그 이상의 조합으로 표현한다.
char형
자바에서는 유니코드에 기반하여 문자를 표현하기 때문에, 자바의 문자 자료형인 char형은 2바이트를 사용한다.
char형 변수 선언
char myChar = 'A';
문자를 변수에 대입하면, 문자 그대로 저장되는 것이 아니라 그 문자에 해당하는 정수 값(아스키코드값)이 저장된다.
예제 1
public class CharacterEx1 {
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); // 정수값에 해당하는 문자 출력
char ch3 = 67;
System.out.println(ch3); // 문자 정수값 출력
System.out.println((char)ch3); // 정수 값에 해당하는 문자 출력
}
}
출력 화면
A
65
B
67
C
- 변수 ch1에 저장된 문자를 int형으로 변환하여 출력하면 그 문자에 해당하는 정수값을 알 수 있다.
- ch2처럼 문자형 변수에 정수 값을 대입하면 그 정수 값에 해당하는 문자가 출력된다.
- ch3과 같이 정수형 변수를 문자형으로 변환하여 출력하면 그 정수값에 해당하는 문자가 출력된다.
예제 2
문자형 변수에 유니코드 값을 직접 사용하는 경우
public class CharacterEx2 {
public static void main(String[] args) {
char ch1 = '한';
char ch2 = '\uD55C'; //유니코드
System.out.println(ch1);
System.out.println(ch2);
}
}
출력 화면
한
한
- '/uD55c'는 '한'이라는 글자의 유니코드 값이고 16진수로 나타내고 있다.
- 16진수 숫자 하나가 4비트를 사용하므로 한글 '한'이라는 글자를 표현하는 데 4비트 4개, 즉 2바이트를 사용한다.
예제 3
문자형 변수에 숫자를 저장하는 경우
public class CharacterEx3 {
public static void main(String[] args) {
int a = 65;
int b = -66;
char a2 = 65;
//char b2 = -66; // 문자형 변수에 음수를 넣으면 오류가 발생한다.
System.out.println((char)a);
System.out.println((char)b);
System.out.println(a2);
}
}
출력 화면
A
?
A
- char형으로 선언한 변수에 음수 값을 대입하면 오류가 발생한다.
- 음수값을 대입한 정수형변수 b를 char형으로 출력하면 물음표(?)로 출력되는데, 알 수 없는 문자라는 의미이다.
반응형
'Back-End > Java' 카테고리의 다른 글
[Java] 상수와 리터럴 (2) | 2023.01.27 |
---|---|
[Java] 논리 자료형 (0) | 2023.01.26 |
[Java] 실수 자료형 (0) | 2023.01.26 |
[Java] 정수 자료형 (0) | 2023.01.25 |
[Java] 변수(Variable) (0) | 2023.01.25 |