정수 자료형
Java에서 정수를 표현하기 위한 자료형은 대표적으로 int,long이 있다 기본적으로 int를 가장 많이 사용하고 그 다음으로 long을 쓴다 byte,short는 잘 사용하지 않는다.
정수형 타입 | 할당되는 메모리 크기 | 데이터의 표현 범위 |
byte | 1byte | -128 ~ 127 |
short | 2byte | -32,768 ~ 32,767 |
int | 4byte | -2,147,483,648 ~ 2,147,483,647 |
long | 8byte | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 |
정수 오버플로우 / 언더플로우
정수형 데이터 타입을 사용할 때에는 반드시 사용하고자 하는 데이터의 최소/최대 크기를 고려를 하면서 써야한다. 만약 해당 타입의 표현 할 수 있는 범위를 벗어난 데이터를 저장하게 된다면 오버플로우가 발생해 전혀 다른 값이 저장되어 프로그램의 버그가 일어날 수 있다. 예로 문명이란 게임에 아주 유명한 버그가 있는데 이 유명한 버그는 오버플로우로 인한 오류이다.
오버플로우 : 표현할 수 있는 최대 범위를 벗어난 큰 수를 저장할 때 발생하는 현상
언더플로우 : 표현할 수 있는 최소 범위를 벗어난 작은 수를 저장할 때 발생하는 현상
실수 자료형
Java에서 실수를 표현할 때 자료형은 float, double 이 있다.
과거에는 float을 많이 썼지만, 컴퓨터의 하드웨어가 발전함에 따라 double을 많이 사용한다.
실수형 타입 | 할당되는 메모리 크기 | 데이터의 표현 범위 | 리터럴 타입 접미사 |
float | 4byte | (3.4 X 10^-38) ~(3.4 X 10^38) | F 또는 f |
double | 8byte | (1.7 X 10^-308) ~ (1.7 X 10^308) | D 또는 d(생략 가능) |
실수의 표현 오차
컴퓨터의 메모리는 한정적이기 때문에 정수를 표현할 수 있는 수의 제한이 있듯이, 실수또한 소수점을 표현하는 수의 제한이 있다.
그래서 컴퓨터에서 실수를 표현할 때 소수점의 오차를 최소화하기 위해 부동 소수점 방식을 이용한다. 하지만 이 오차는 Java에서 발생하는게 아닌 모든 프로그래밍 언어에서 발생하는 기본적인 문제이다.
실수형 타입 | 유효 자릿수 |
float | 소수점 약 6 ~ 7자리까지 높은 확률로 정확히 표현 |
double | 소수점 약 15 ~ 16자리까지 높은 확률로 정확히 표현 |
실수의 오버폴로우/언더플로우
실수형에서도 역시 오버플로우와 언더플로우가 발생하는데, 정수형과의 차이점이 있다면 정수형의 오버플로우는 어떤 값이 들어가는 반면에 실수의 오버플로우는 무한대가 된다.그리고 언더플로우 역시 차이점이 존재하는데 실수의 오버플로우는 0값이 들어가게 된다.
오버플로우 : 무한대
언더플로우 : 0
문자 자료형
한개의 문자 값에 대한 자료형을 저장하는 char이다. 이때 '(단일부호)로 감싸주어야한다. 만약 "(쌍따옴표)로 감싸준다면 에러가 발생한다.
문자형 타입 | 할당되는 메모리의 크기 | 데이터의 표현 범위 |
char | 2byte | 0 ~ 65,535 |
아스키 코드
문자를 표현할 때 char형에서 어떤 정수 값을 넣으면 문자로 표시가 되는데 이것을 아스키 코드라고 한다.
아스키 코드란1962년 안시(ANSI)가 정의한 미국 표준 정보교환 코드이며 1963년 미국표준협회(ASA)에 의해 결정되어 미국의 표준 부호가 되었다. 아스키 코드는 7비트의 이진수 조합으로 만들어져 총 128개의 부호를 표현할 수 있다. 아스키코드의 처음 32개(0~31)는 프린터나 전송 제어용으로 사용되고 나머지는 숫자와 로마 글자 및 도량형 기호와 문장 기호를 나타낸다.
유니코드
시간이 지남에 따라 1byte로 정의된 아스키 코드를 확장할 필요가 있었고, 각 나라별 언어를 모두 표현하기 위해 나온 코드 체계가 유니코드이다. 각각 아스키 코드와 유니코드는 구글링을 하면 정의된 표를 볼 수 있으니 참고하길 바란다.
논리 자료형
논리형 타입 | 할당되는 메모리의 크기 | 데이터의 표현 범위 |
boolean | 1byte | true,false |
'Language > Java' 카테고리의 다른 글
[Java] 형 변환 (0) | 2023.08.22 |
---|---|
[Java] 변수와 변수의 기본형 타입과 참조형 타입 (0) | 2023.08.22 |
[Java] 자료형과 데이터 (0) | 2023.08.20 |
[Java] java printf와 println 차이점 (0) | 2023.08.20 |
[Java] JRE와 JDK에 대해 알아보자 (0) | 2023.08.17 |