본문 바로가기

Java/기초

[Java] 기본형(Primitive type) - 논리형, 문자형

1. 논리형 - boolean

- true, false 중 하나를 저장할 수 있으며 기본값(default)은 false이다.

- 대답(yes/no), 스위치(on/off) 등의 논리구현에 주로 사용된다.

- true, false 두가지 값만을 표현하면 되므로 1bit만으로도 충분하지만, 자바에서는 데이터를 다루는 최소단위가 byte이기 때문에, boolean의 크기가 1byte이다.

- 자바에서는 대소문자가 구별되기 때문에 TRUE와 true는 다른것으로 간주된다.

- False(x), true(o), false(o)

2. 문자형 - char

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

- 위의 문장은 변수에 저장되는 것 같지만, 문자가 아닌 '문자의 유니코드(정수)'가 저장된다.  문자 'A'가 아닌 유니코드 'A'의 유니코드인 65로 저장된다.

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

 int code = (int)ch;

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

 

특수 문자

영문자 이외에 tab이나 backspace 등의 특수문자를 저장하려면, 아래와 같이 조금 특별한 방법을 사용한다.

 char tab = '\t';

특수 문자 문자 리터럴
tab \t
backspace \b
form feed \f
new line \n
carriage return \r
역슬래쉬(\) \\
작은따옴표 \'
큰따옴표 \"
유니코드(16진수)문자 \u유니코드(ex. char a = '\u0041')

char타입의 표현형식

char타입(2byte=16bit)은 16자리의 2진수로 표현할 수 있는 정수의 개수인 65536개(2^16)의 코드를 사용할 수 있으며,

2byte(=16 bit)로 모두 216(=65536)개의 값을 표현할 수 있다. char타입에 저장되는 값인 유니코드는 모두 양수(0 포함)이므로, '0~65535'의 범위를 가지며, 정수형인 'short'는 절반을 음수표현에 사용하므로 '-32768~32767'의 범위를 갖는다.

16 bit 로 표현할 수 있는 정수의 개수 : 216 개        (65536개)

                    short타입의 표현범위 : -215 ~ 215-1(-32767 ~ 32767)

                     char타입의 표현범위 : 0 ~ 216-1    (0 ~ 65535)

 

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

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

  short s = 65

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

값은 어떻게 해석하느냐에 따라 결과가 달라지므로 값만으로는 값을 해석할 수 없다.

ex. 1231이라는 값의 타입을 모르면 이 값을 '천이백삼십일'로 해석해야할지, 아니면 12월31일이나 12시 31분으로 해석할지 알 수없다.

 

인코딩과 디코딩(encoding & decoding)

A (인코딩) -> 65 (디코딩) -> A

이처럼 문자를 코드로 변환하는 것을 '문자 인코딩(encoding)', 그 반대로 코드를 문자로 변환하는 것을 '문자 디코딩(decoding)'이라고 한다. 문자를 저장할 떄는 인코딩을 해서 숫자로 변환하여 저장하고, 저장된 문자를 읽어올 때는 디코딩을 해서 숫자를 원래의 문자로 되돌려야 한다

- encode : ~을 코드화하다. ~을 암호화 하다.

- 해당 html문서의 인코딩에 사용된 코드표와 웹브라우져의 설정이 안맞을 경우 글자가 깨져서 보이게 된다.

 

아스키(ASCII)

'ASCII'는 'American Standard Code for Information Interchange'의 약어로 정보교환을 위한 미국 표준 코드랑 뜻이다.

아스키는 128개(=27)의 문자 집합(character set)을 제공하는 7 bit부호로, 처음 32개의 문자는 인쇄와 전송 제어용으로 사용되는 '제어문자(control character)'로 출력할 수 없고 마지막 문자(DEL)를 제외한 33번째 이후의 문자들을 출력할 수 있는 문자들로, 기호와 숫자, 영대소문자로 이루어져 있다.

아스키는 숫자 '0~9', 영문자 'A~Z'와 'a~z'가 연속적으로 배치되어 있다는 특징이 있으며, 이러한 특징은 프로그래밍에서 유용하게 활용된다.

 

확장 아스키(Extended ASCII)와 한글

일반적으로 데이터는 byte단위로 다뤄지는데 아스키는 7bit이므로 1bit가 남는다. 이 남는 공간을 활용해서 문자를 추가로 정의한 것이 '확장 아스키'이다. 확장 아스키에 추가된 128개의 문자는 여러 국가와 기업에서 서로의 필요에 따라 다르게 정의해서 사용한다.

'ISO(국제표준화기구)'에서 확장 아스키의 표준을 몇 가지 발표했는데, 그 중에서 대표적인 것이 'ISO 8859-1'이다. 이 확장 아스키 버젼은 'ISO Latin 1'이라고도 하는데 서유럽에서 일반적으로 사용하는 문자들을 포함하고 있다.

 

유니코드(Unicode)

예전엔 같은 지역 내에서만 문서교환이 주를 이뤘지만, 인터넷이 발명되면서 서로 다른 지역의 다른 언어를 컴퓨터간의 문서교환이 활발해지기 시작하자 서로 다른 문자 인코딩을 사용하는 컴퓨터간의 문서교환에 어려움을 겪게 되었다. 이러한 어려움을 해소하고자 전 세계의 모든 문자를 하나의 통일된 문자집합으로 표현하고자 노력하였고 그 결과가 바로 '유니코드'이다.

유니코드는 처음엔 모든 문자를 2byte(=216=65536)로 표현하려했으나, 2 byte(=16 bit)로도 부족해서 21 bit(약 200만 문자)로 확장되었다. 새로 추가된 문자들을 보충 문자(supplementary character)라고 하는데 이 문자들을 표현하기 위해서는 char타입이 아닌 int타입 사용해야 한다. 우리가 보충문자를 쓸 일은 거의 없기 때문에 참고로만 알아두면 된다.

유니코드는 먼저 유니코드에 포함시키고자 하는 문자들의 집합을 정의하였는데, 이것을 유니코드 문자 셋(또는 캐릭터 셋, character set)이라고 한다. 그리고 이 문자 셋에 번호를 붙인 것이 유니코드 인코딩이다. 유니코드 인코딩에는 UTF-8, URF-16, UTF-32 등 여러 가지 종류가 있는데 자바에서는 UTF-16을 사용한다. UTF-16은 모든 문자를 2byte의 고정크기로 표현하고 UTF-8은 하나의 문자를 1~4 BYTE의 가변크기로 표현한다. 그리고 두 인코딩 모두 처음 128문자가 아스키와 동일하다. 아스키를 그대로 포함하고 있는 것이다.

[참고] 코드 포인트(code point)는 유니코드 문자 셋에 순서대로 붙인 일련번호이다. 유니코드에는 뭐라고 읽는지도 알 수 없는 문자들이 많이 포함되어 있으므로, 이 문자들은 번호(코드 포인트)로 다루는 것이 편리하다.

모든 문자의 크기가 동일한 UTF-16이 문자를 다루기는 편리하지만, 1 byte로 표현할 수 있는 영어와 숫자가 2 byte로 표현되므로 문서의 크기가 커진다는 단점이 있다. UTF-8에서 영문과 숫자는 1 byte 그리고 한글은 3 byte로 표현되기 때문에 문서의 크기가 작지만 문자의 크기가 가변적이므로 다루기 어렵다는 단점이 있다.

인터넷에서는 전송속도가 중요하므로, 문서의 크기가 작을수록 유리하다. 그래서 UTF-8인코딩으로 작성된 웹문서의 수가 빠르게 늘고 있다.

'Java > 기초' 카테고리의 다른 글

[Java] 형변환  (0) 2020.06.21
[Java] 기본형(Primitive type) - 정수형, 실수형  (0) 2020.06.21
[Java] 진법  (0) 2020.06.14
[Java] 자바 변수(Variable)  (0) 2020.06.10
[Java] 자바개발환경, 프로그램 작성  (0) 2020.06.07