1. 논리형 - boolean
논리형에는 True와 False만 존재하며 기본값(default)은 false이다. boolean에는 참과 거짓, on/off등 과 같은 논리구조에 사용된다.
Ex) boolean bol = true;
boolean bol2 = False; //에러발생. 대소문자를 구분하기에 false로 입력해야함.
2. 문자형 - char
char은 한가지 자료형 만 존재한다. 문자를 저장하기 위해서 사용되지만 단 하나의 문자만을 저장할 수 있다. char은 정확하게 문자의 유니코드(정수)의 형태가 저장되기에 A의 유니코드인 65가 저장된다.
Ex) char ch = 'A';
아스키(ASCII)
ASCII는 American Standard Code for Information Interchange의 약어로 정보교환을 위한 미국 표준 코드란 뜻이다. 아스키는 128개의 문자집합을 제공하는 7bit부호이다. 아스키는 0~9, A~Z, a~z가 연속적으로 배치되어 있다는 특징이 있으며, 이러한 특징은 프로그래밍에서 유용하다.
확장 아스키(Extended ASCII)
일반적으로 데이터는 byte단위로 다뤄지는데 아스키는 7bit이므로 1bit가 남는다. 이 남는 공간을 활용해서 문자를 추가로 정의한 것이 '확장 아스키'이다. 확장 아스키에 추가된 12개의 문자는 여러 국가와 기업에서 서로의 필요에 따라 다르게 정의해서 사용한다.
유니코드(Unicode)
21bit(약 200만 문자)를 갖고있다. 새로 추가된 문자들을 보충 문자라고 하는데 이 문자를 표현하기 위해서는 char형태가 아닌 int형태를 사용해야한다. 유니코드의 인코딩에는 UTF-8, UTF-16,UTF-32 등 다양한 인코딩이 존재하는데, 자바에서는 UTF-16을 사용한다.
3. 정수형 - byte, short, int, long
단위는 byte(1byte) → short(2byte) → int(4byte) → long(8byte)
8비트로 표현할 수 있는 정수의 개수는 2^8개
8비트로 표현할 수 있는 부호있는 정수의 범위 -2^7 ~ (2^7)-1(-128~127)
byte와 short보다는 int를 선호하는 것이 좋다. byte와 short는 크기가 작아서 메모리를 절약이 가능하나, 저장할 수 있는 값이 적어 연산시 의도치 않은 결과를 가질 수 있다. 또한, JVM의 피연산자 스택이 피연산자를 4byte단위로 저장하기 때문에 크기가 4byte보다 작은 자료형의 값을 계산할 때는 4byte로 변환하여 연산이 수행되기에 int가 더 효율적이다.
정수형의 오버플로우
타입이 표현할 수 있는 값의 범위를 넘어서는 것을 오버플로우(overflow)라고 한다. 오버플로우는 만보기를 생각하면 된다. 10,000보를 다 걸으면 다시 0보부터 시작하는 것과 같이 '9999'에서 그 다음은 0이 된다.
부호있는 정수의 오버플로우
부호가 있는 정수는 부호비트가 0에서 1이 될 때 오버플로우가 발생한다.
public static void main(String[] args) {
short sMin = -32768;
short sMax = 32767;
char cMin = 0;
char cMax = 65535;
System.out.println("sMin = "+sMin);
System.out.println("sMin-1 = "+(short)(sMin-1));
System.out.println("sMax = "+sMax);
System.out.println("sMax+1 = "+(short)(sMax+1));
System.out.println("sMin = "+(int)cMin);
System.out.println("sMin-1 = "+(int)--cMin);
System.out.println("sMax = "+(int)cMax);
System.out.println("sMax = "+(int)++cMax);
}
//결과
sMin = -32768
sMin-1 = 32767
sMax = 32767
sMax+1 = -32768
sMin = 0
sMin-1 = 65535
sMax = 65535
sMax = 0
실수형 - float, double
실수형은 실수를 저장하기 위한 타입으로 float, double 두 가지가 존재한다. 정수형과 달리 실수형에서는 오버플로우가 발생시 무한대가 된다. 7자리 이상의 정밀도를 요하는 경우 float보다는 double을 사용하는 것이 적합하다.
- 실수형의 저장형식은 크게 3가지로 나뉘는데 부호, 지수, 가수의 형태로 저장된다
- 부호(Sign bit)는 0이면 양수 1이면 음수를 나타낸다.
- 지수(Exponent)는 부호있는 정수이며 float의 경우, 8bit의 저장공간을 갖는다.
- 가수(Mantissa)는 실제 값을 저장하는 부분을 담당한다. float의 경우, 2진수 23자리를 저장 할수 있다.
출처 : JAVA의 정석 - (남궁성지음)