1. 논리형 - boolean
- boolean형 변수에는 true와 false 중 하나를 저장할 수 있으며, 기본값은 false
- 주로 대답(yes/no), 스위치(on/off)등의 논리구현에 사용
- boolean의 크기는 1byte
- 자바에서는 대소문자가 구별되기 때문에 true != TRUE
2. 문자형 - char
- 문자를 저장하기 위한 변수를 선언할 때 사용. 단 하나의 문자만을 저장할 수 있다.
- 문자의 유니코드(정수)가 저장되므로 char ch = 'A'; char ch = 65; 는 동일한 결과를 얻는다. (문자 'A'의 유니코드는 10진수로 65)
- char형 변수에 저장된 값을 정수형(int)으로 변환하면 유니코드를 알 수 있다.
ex) char ch = 'A'; ===> int code = (int) ch;
- 특수 문자 다루기
특수 문자 | 문자 리터럴 |
tab | \t |
backspace | \b |
form feed | \f |
new line | \n |
carriage return | \r |
역슬래쉬(\) | \\ |
작은따옴표 | \' |
큰따옴표 | \" |
유니코드(16진수)문자 | \u유니코드 (ex: char a='\u0041') |
<특수문자를 표현하는 방법>
- char타입의 표현형식
- char타입의 크기는 2byte(=16 bit)이며, 65536(2^16)개의 코드를 사용할 수 있다.
- char타입에 저장되는 값인 유니코드는 모두 양수(0포함)이므로 '0~65535'의 범위를 가진다. - 인코딩과 디코딩(encoding & decoding)
- 문자 인코딩 : 문자를 코드로 변환하는 것
- 문자 디코딩 : 코드를 문자로 변환하는 것 - 아스키(ASCII)
- 'American Standard Code for Information Interchange'의 약어로 정보교환을 위한 미국 표준 코드
- 128(2^7)개의 문자 집합을 제공하는 7bit 부호, 기호와 숫자, 영대소문자로 이루어져 있다.
- 숫자 '0~9', 영문자(A~Z, a~z)가 연속적으로 배치되어 있다. - 확장 아스키(Extended ASCII)와 한글
- 문자를 표현할 때, 8bit를 사용함으로써 추가적인 문자를 표현함
- 한글을 표현하는 방법은 조합형과 완성형이 있으며, 현재 한글 윈도우에서 작성된 문서는 기본적으로 확장 완성형(CP 949)로 인코딩되어 저장됨 - 코드 페이지(code page, cp)
- 확장 아스키의 256개의 문자를 어떤 숫자로 변환할 것인지 적어놓은 '문자 코드표(code page)' - 유니코드(Unicode)
- 전 세계의 모든 문자를 하나의 통일된 문자집합으로 표현함
- 유니코드 인코딩에는 UTF-8, UTF-16, UTF-32 등 여러 종류가 있으며 자바에서는 UTF-16을 사용함
- UTF-16은 모든 문자를 2byte의 고정크기로 표현하고, UTF-8은 하나의 문자를 1~4byte의 가변크기로 표현함
3. 정수형 - byte, short, int, long
- 정수형에는 byte, short, int, long이 있으며, 크기순으로는 byte(1byte) < short(2byte) < int(4byte) < long(8byte)
- 기본 자료형은 int이다.
- 정수형의 표현형식과 범위
- 범위의 최대값에서 1을 빼는 이유는 범위에 0이 포함되기 때문
- 정수형의 선택기준
- 정수형 변수를 선언할 때는 int타입으로 하고, int의 범위(약 ±20억)를 넘어서는 수를 다뤄야할 때 long을 사용
> byte, short는 메모리를 조금 더 절약할 수 있지만, 저장할 수 있는 값의 범위가 작은 편이기 때문에 연산 시에 범위를 넘어서 잘못된 결과를 얻기 쉬움 - 정수형의 오버플로우
- 타입이 표현할 수 있는 값의 범위를 넘어서는 것
- 정수형 타입이 표현할 수 있는 최대값에 1을 더하면 최소값이 되고, 최소값에서 1을 빼면 최대값이 됨
(최대값 + 1 -> 최소값, 최소값 -1 -> 최대값)
ex) 4bit 2진수의 최대값인 '1111'에 1을 더하면 '10000'이 되지만, 4bit는 4자리의 2진수만 저장할 수 있기 때문에 '0000'이 됨.
4bit 2진수의 최소값인 '0000'에서 1을 감소시키면 0에서 1을 뺄 수 없으므로 앞에 저장되지 않는 1이 있다고 가정하고 뺼셈을 하면 '1111'이 됨. - 부호있는 정수의 오버플로우
- 부호있는 정수는 부호비트가 0에서 1이 될 때 오버플로우가 발생한다.
4. 실수형 - float, double
- 실수형의 범위와 정밀도
- 실수형은 실수를 저장하기 위한 타입으로 float, double이 있다.
- float타입의 표현범위는 '-3.4x10^38 ~ 3.4x10^38'이지만, '-1.4x10^(-45) ~ 1.4x10^(-45)범위(0은 제외)의 값은 표현할 수 없다.
- 실수형에서 오버플로우가 발생하면 변수의 값은 '무한대'가 된다.
- 언더플로우(underflow) : 실수형으로 표현할 수 없는 아주 작은 값, 즉 양의 최소값보다 작은 값이 되는 경우를 말함. 이 때 변수의 값은 0이 된다.
- 연산속도의 향상이나 메모리를 절약하려면 float, 더 큰 값의 범위나 더 높은 정밀도를 필요로 하면 double을 선택해야 한다.
- 실수형의 저장형식
- 실수형은 값을 부동소수점수(floating-point)의 형태로 저장한다.
- 부동소수점수 : 실수를 '±M x 2^E'와 같은 형태로 표현하는 것으로 부호(Sign), 지수(Exponent), 가수(Mantissa) 세 부분으로 이루어져 있다.
- 부동소수점의 오차
- 실수 중에는 '파이(π=3.141592...)와 같은 무한소수가 존재하므로, 정수와 달리 실수를 저장할 때는 오차가 발생할 수 있음.
'프로그래밍 > JAVA' 카테고리의 다른 글
[ JAVA ] 오버라이딩(overriding) (0) | 2022.10.09 |
---|---|
[ JAVA ] 상속(inheritance) (0) | 2022.10.09 |
[ JAVA ] 자바의 형변환 (0) | 2022.10.08 |
[ JAVA ] 변수와 메서드 (0) | 2022.09.20 |
[ JAVA ] 진법 (0) | 2022.08.27 |