자바의 자료형 - 기본 타입 (Primitive Type)
▶ 기본타입(Primitive Type) 이란?
※ primitive : 초기의, 원시적인 단계의
- 데이터 타입(data type)은 해당 데이터가 메모리에 어떻게 저장되고, 프로그램에서 어떻게 처리되어야 하는지를 명시적으로 알려주는 역할을 합니다.
- 자바(Java)에서는 여러 형태의 타입을 미리 정의하여 제공하고 있는게 이것을 기본 타입(primitive type)이라고 합니다.
- 자바(Java)에서 제공하는 기본타입은 모두 8종류이며 크게는 정수형, 실수형, 문자형, 그리고 논리형 타입으로 나눌 수 있습니다.
▶ 정수형 타입
- 자바에서 정수란 부호를 가지고 있으며, 소수 부분이 없는 수입니다.
- 자바의 기본 타입 중 정수를 나타내는 타입은 byte, short, int, long 이렇게 있습니다.
- 각각의 정수형 타입에 따른 메모리의 크기 및 데이터의 표현 범위를 보도록 하겠습니다.
정수형 타입 | 할당되는 메모리의 크기 | 데이터의 표현 범위 |
byte | 1 바이트 | -128 ~ 127 |
short | 2 바이트 | -2^15 ~ (2^15-1) |
-32,768 ~ 32,767 | ||
int | 4 바이트 | -2^31 ~ (2^31 - 1) |
-2,147,483,648 ~ 2,147,483,647 | ||
long | 8 바이트 | -2^63 ~ (2^63 -1) |
-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 |
- 정수형 데이터 타입을 결정할 때에는 반드시 자신이 사용하고자 하는 데이터의 최대 크기를 고려해야 합니다. 해당 타입의 범위를 벗어난 데이터를 저장하면, 오버플로우(overflow)가 발생해 전혀 다른 값이 저장될 수 있습니다.
※ overflow : 넘치다, 넘쳐나다, 초과됨
- 해당 타입이 표현할 수 있는 최대 범위보다 큰 수를 저장할 때 발생하는 현상입니다.
- 반대로 언더플로우(underflow)란 해당 타입이 표현할 수 있는 최고 범위보다 작은 수를 저장할 때 발생하는 현상입니다.
// 오버플로우나 언더플로우가 발생한 예
public class Datatype{
public static void main(String[] args){
byte num1 = 127; // byte의 최대 범위
byte num2 = -128; // byte의 최소 범위
num1++; // 127 + 1 -> 최대 범위에 +1 -> 오버플로우
num2-- // -128 -1 -> 최소 범위에 -1 -> 언더플로우
System.out.println(num1); // 오버플로우
System.out.println(num2); // 언더플로우
}
}
-----------------------------------------------------------------------
출력 결과
-128 -> num1의 오버플로우 결과
127 -> num2의 언더플로우 결과
※ 자바에서 정수형 타입의 기본이 되는 타입은 int형입니다. 따라서 컴퓨터는 내부적으로 정수형 중에서도 int형의 데이터를 가장 빠르게 처리합니다.
▶ 실수형 타입
- 자바에서 실수란 소수부나 지수부가 있는 수를 가리키며, 정부보다 훨씬 더 넓은 표현 범위를 가집니다.
- 자바의 기본 타입 중 실수를 나타내는 타입은 float, double이 있습니다.
- 과거에는 실수를 표현할 때 float형을 많이 사용했지만, 하드웨어의 발달로 인한 메모리 공간의 증가로 현재에는 double형을 가장 많이 사용합니다.
- 각각의 실수형 타입에 따른 메모리의 크기 및 데이터의 표현 범위를 보도록 하겠습니다.
※ 실수형 데이터의 타입을 결정할 때에는 표현 범위 이외에도 반드시 유효 자릿수를 고려해야 합니다.
실수형 타입 | 지수의 길이 | 가수의 길이 | 유효 자릿수 |
float | 8 비트 | 23 비트 | 소수부분 6자리까지 오차없이 표현할 수 있음 |
double | 11 비트 | 52 비트 | 소수부분 15자리까지 오차없이 표현할 수 있음 |
실수형 타입 | 할당되는 메모리의 크기 | 데이터의 표현 범위 | 리터럴 타입 접미사 |
float | 4 바이트 | (3.4 X 10^-38) ~ (3.4 X 10^38) | F 또는 f |
double | 8 바이트 | (1.7 X 10^-308) ~ (1.7 X 10^308) | D 또는 d (생략 가능함) |
※ 컴퓨터에서 실수를 표현하는 방식은 오차가 발생할 수 밖에 없는 태생적 한계를 지니고 있습니다. 이러한 실수형 데이터의 오차는 자바 뿐만 아니라 모든 프로그래밍 언어에서 발생하는 공통된 문제입니다.
▶ 문자형 타입
- 자바에서 문자형 데이터란 작은 정수나 문자 하나를 표현할 수 있는 타입을 의미합니다.
- 자바의 기본 타입 중 문자를 나타내는 타입은 char이 있습니다.
- 컴퓨터는 2진수 밖에 인식하지 못하기 때문에 문자도 숫자로 표현해야 인식할 수 있습니다. 따라서 어떤 문자를 어떤 숫자에 대응시킬 것인가에 대한 약속이 필요했습니다.
※ C언어와 C++에서의 약속 : 아스키코드(ASCII)
아스키코드(ASCII) : 영문 대소문자를 사용하는 7비트의 문자 인코딩 방식입니다.
아스키코드는 문자 하나를 7비트로 표현하므로, 총 128개의 문자를 표현할 수 있습니다.
※ 자바에서의 약속 : 유니코드(unicode)
유니코드 : 각 나라의 모든 언어를 표현할 수 있습니다.
문자 하나를 16비트로 표현하므로, 총 65,536개의 문자를 표현할 수 있습니다.
유니코드 표 : http://www.unicode.org/charts/PDF/UAC00.pdf
▲ 링크를 통해서 유니코드 표를 보실 수 있습니다.
▼ 아스키코드 표 (ASCII)
- 문자형 타입에 따른 메모리의 크기 및 데이터의 표현 범위를 보도록 하겠습니다.
문자형 타입 | 할당되는 메모리의 크기 | 데이터의 표현 범위 |
char | 2 바이트 | 0 ~ 2^16 |
▶ 논리형 타입
- 논리형은 참(true)과 거짓(false) 중 한 가지 값만 가질 수 있는 불리언 타입을 의미합니다.
- 자바의 기본 타입 중 논리형 타입은 boolean 타입입니다.
- boolean형의 기본값은 false이며, 기본 타입 중 가장 작은 크기인 1 바이트의 크기를 가집니다.
- 논리형 타입에 따른 메모리의 크기 및 데이터의 표현 범위를 보도록 하겠습니다.
논리형 타입 | 할당되는 메모리의 크기 | 데이터의 표현 범위 |
boolean | 1 바이트 | true 또는 false |
'Programing > JAVA' 카테고리의 다른 글
Java Type (타입 변환) (0) | 2021.07.16 |
---|---|
Java Type (실수의 표현) (0) | 2021.07.16 |
Java Type (상수) (0) | 2021.07.15 |
Java Type (변수) (0) | 2021.07.15 |
Java 출력 메소드 (0) | 2021.07.15 |