Post

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.