Post

Java 원시 데이터 유형

Java 원시 데이터 유형

1. 원시 데이터 유형

Java 프로그래밍 언어에는 8가지 기본 데이터 유형이 있다.

Java에 정의된 8개의 기본 요소는 int, byte, short, long, float, double, boolean 및 char이다. 이들은 객체로 간주하지 않고 원시 값을 나타내며 스택에 직접 저장된다.

  • 빠른 참조
TypeSize (bits)MinimumMaximumExample
byte8-2⁷2⁷–1byte b = 100;
short16-2¹⁵2¹⁵–1short s = 30_000;
int32-2³¹2³¹–1int i = 100_000_000;
long64-2⁶³2⁶³–1long l = 100_000_000_000_000;
float32-2⁻¹⁴⁹(2-2⁻²³)·2¹²⁷float f = 1.456f;
double64-2⁻¹⁰⁷⁴(2-2⁻⁵²)·2¹⁰²³double f = 1.456789012345678;
char1602¹⁶–1char c = ‘c’;
boolean1--boolean b = true;

2. int

정수라고도 하는 int 유형은 분수가 아닌 다양한 값을 보유한다.

특히 Java는 32비트 메모리를 사용하여 저장합니다. 즉, -2,147,483,648(-2³¹)부터 2,147,483,647(2³¹-1) 까지의 값을 나타낼 수 있다.

Java 8에서는 새로운 특수 도우미 함수를 사용하여 최대 4,294,967,295(2³²-1) 의 부호 없는 정숫값을 저장할 수 있다.

간단히 int를 선언할 수 있다.

1
2
3
int x = 424_242;

int y;

할당 없이 선언된 int의 기본값은 0이다.

변수가 메서드에 정의되어 있으면 값을 할당해야 사용할 수 있다.

int에 대해 모든 표준 산술 연산을 수행할 수 있다. 정수에 대해 이러한 작업을 수행할 때 소수 값이 잘릴 수 있다는 점에 유의해야 한다.

3. byte

byte는 메모리의 8비트만 차지한다는 점을 제외하고는 int와 유사한 기본 데이터 유형이다. 그래서 바이트라고 부르는 이유이다. 메모리 크기가 너무 작아서 바이트는 -128(-2⁷)에서 127(2⁷–1) 사이의 값만 보유할 수 있다.

바이트를 생성할 수 있다.

1
2
3
byte b = 100;

byte empty;

byte의 기본값도 0이다.

4. short

메모리를 절약하고 싶고 바이트가 너무 작으면 둘 사이의 중간 유형인 short를 사용할 수 있다.

16비트 메모리에서는 int 크기의 절반이고 byte 크기의 두 배이다. 가능한 값의 범위는 -32,768(-2¹⁵) ~ 32,767(2¹⁵–1)이다.

short는 다음과 같이 선언된다.

1
2
3
short s = 202_020;

short s;

또한 다른 유형과 유사하게 기본값은 0이다. 모든 표준 산술도 사용할 수 있다.

5. long

long은 int의 형이다. 64비트 메모리에 저장되어 훨씬 더 많은 가능한 값 집합을 보유할 수 있다.

long의 가능한 값은 -9,223,372,036,854,775,808(-2⁶³)에서 9,223,372,036,854,775,807(2⁶³–1) 사이이다.

단순히 하나를 선언할 수 있다.

1
2
3
long l = 1_234_567_890;

long l;

다른 정수 유형과 마찬가지로 기본값도 0이다. int에서 작동하는 long에서 모든 산술을 사용할 수 있다.

6. float

우리는 float type을 사용하여 Java의 기본 분수 수를 나타낸다. 이것은 정밀도가 한 개인 소수이다. 즉, 소수점 6개를 넘으면, 이 숫자는 정확도가 떨어지고 추정치에 가깝다.

대부분의 경우 정밀 손실에 대해서는 신경 쓰지 않는다. 그러나, 우리의 계산이 절대 정밀도를 필요로 한다면(예: 재무 운영, 달 착륙 등) 우리는 이 작업을 위해 설계된 특정 유형을 사용해야 한다. 자세한 내용은 Java 클래스 Big Decimal을 참조한다.

이 유형은 int처럼 32비트 메모리에 저장된다. 그러나 부동 소수점 때문에 범위가 많이 다르다. 양수와 음수를 모두 나타낼 수 있다. 가장 작은 소수는 1.40239846 x 10⁻⁴⁵이고 가장 큰 값은 3.40282347 x 10³⁸이다.

float를 다른 유형과 동일하게 선언한다.

1
2
3
float f = 3.145f;

float f;

그리고 기본값은 0 대신 0.0이다. 또한 float를 정의하기 위해 리터럴 숫자 끝에 f 지정을 추가한다. 그렇지 않으면 10진수 값의 기본 유형이 double이므로 Java에서 오류가 발생한다.

또한 float에 대해 모든 표준 산술 연산을 수행할 수 있다. 그러나 부동 소수점 산술을 정수 산술과 매우 다르게 수행한다는 점에 유의하는 것이 중요하다.

7. double

이름은 그것이 이중 소수라는 사실에서 유래되었다.

64비트 메모리에 저장된다. 이는 float 보다 훨씬 더 넓은 범위의 가능한 숫자를 나타냄을 의미한다.

그러나 float와 동일한 정밀도 제한이 있다. 범위는 4.9406564584124654 x 10⁻³²⁴에서 1.7976931348623157 × 10³⁰⁸이다. 그 범위는 양수 또는 음수일 수도 있다.

double 선언은 다른 숫자 유형과 동일하다.

1
2
3
double d = 3.13457599923384753929348D;

double d;

기본값도 float와 마찬가지로 0.0이다. float와 유사하게 문자 D를 첨부하여 literal을 double로 지정한다.

8. boolean

가장 간단한 기본 데이터 유형은 boolean이다. true 또는 false의 두 가지 값만 포함할 수 있다. 단일 비트에 값을 저장한다.

그러나 편의를 위해 Java는 값을 채우고 단일 바이트에 저장한다.

다음과 같이 부울을 선언한다.

1
2
3
boolean b = true;

boolean b;

값 없이 선언하면 기본값은 false이다. boolean은 프로그램 흐름을 제어하는 초석이다. 부울 연산자를 사용할 수 있다(예: and, or 등).

9. char

문자라고도 하는 char는 유니코드로 인코딩된 문자를 나타내는 16비트 정수이다. 범위는 0에서 65,535까지이다. 유니코드에서 \u0000에서 \uffff를 나타낸다.

가능한 모든 유니코드 값 목록은 Unicode Table과 같은 사이트를 확인한다.

다음과 같이 char를 선언한다.

1
2
3
4
5
char c = 'a';

char c = 65;

char c;

변수를 정의할 때 모든 문자 리터럴을 사용할 수 있으며 자동으로 유니코드 인코딩으로 변환된다. 문자 기본값은 \u0000이다.

10. Overflow

원시 데이터 유형에는 크기 제한이 있다. 하지만 최댓값보다 큰 값을 저장하려고 하면 overflow라는 상황에 부딪힌다.

정수가 overflow되면 최소값으로 롤오버되고 여기서부터 카운트를 시작한다.

Infinity를 반환하여 부동 소수점 번호가 overflow된다. Underflow시 0.0을 반환한다.

다음은 예이다.

1
2
3
4
5
6
7
int i = Integer.MAX_VALUE;
int j = i + 1;
// j will roll over to -2_147_483_648

double d = Double.MAX_VALUE;
double o = d + 1;
// o will be Infinity

Underflow는 최소값보다 작은 값을 저장하는 경우를 제외하고는 동일한 문제이다.

11. Autoboxing

각 기본 데이터 유형에는 랩핑할 수 있는 완전한 Java 클래스 구현도 있다. 예를 들어 Integer 클래스는 int를 래핑할 수 있다. 때때로 원시 유형에서 객체 래퍼로 변환해야 할 필요가 있다(예: 제네릭 과 함께 사용).

다행히도 Java는 이 변환을 자동으로 수행할 수 있다. 우리는 이 과정을 Autoboxing 이라고 부른다. 다음은 예이다.

1
2
3
Character c = 'c';

Integer i = 1;

[출처 및 참고]

This post is licensed under CC BY 4.0 by the author.