Java Data Types
자바 데이터 타입
- Java 에서 제공하는 데이터 타입은 아래와 같이 크게 두 가지로 구분된다:
- Primitive Type (기본 타입)
- Reference Type (참조 타입)
Java Primitive Data Types (자바 기본 데이터 타입)
Type |
Description | Range | Default Value |
byte |
- 8-bit Signed Two's Complement Integer - 대규모 Array 를 처리하는 등 메모리를 절약해야할 때 적합한 타입이다. - 변수의 Range 가 제약되어 있음을 코드에 명시적으로 표현할 때 적합하다. |
-128 ~ +127 (Inclusive) |
0 |
short |
- 16-bit Signed Two's Complement Integer - 대규모 Array 를 처리하는 등 메모리를 절약해야할 때 적합한 타입이다. - 변수의 Range 가 제약되어 있음을 코드에 명시적으로 표현할 때 적합하다. |
-32,768 ~ +32,767 (Inclusive) |
0 |
int |
- Default Type of Integer - 32-bit Signed Two's Complement Integer - Unsigned 32-bit Integer 를 표현할 수도 있다. (Java SE 8) - compareUnsigned() , divideUnsigned() 와 같은 Static Method 들이 Unsigned Integer 연산을 위해 Interger 클래스에 추가되었다. |
-2,147,483,648 \((-2^{31})\) ~ +2,147,483,647 \((+2^{31}-1)\) (Inclusive) |
0 |
long |
- 64-bit Two's Complement Integer - Unsigned 64-bit Integer 를 표현할 수도 있다. (Java SE 8) - compareUnsigned() , divideUnsigned() 와 같은 Static Method 들이 Unsigned Integer 연산을 위해 Long 클래스에 추가되었다. |
-9,223,372,036,854,775,808 \((-2^{63})\) ~ +9,223,372,036,854,775,807 \((+2^{63}-1)\) (Inclusive) |
0 |
float |
- Single-Precision 32-bit IEEE 754 Floating Point - 대규모 Array 를 처리하는 등 메모리를 절약해야할 때 적합한 타입이다. - Currency 와 같은 정밀한 값을 처리할 때는 절대 사용하면 안된다. (이 경우 java.math.BigDecimal 이 권고된다.)- 자바에서는 BigDecimal 을 커버하는Numbers , Strings 와 같은유용한 Class 들을 제공하고 있다. |
Single-Precision 32-bit IEEE 754 Floating Point |
0.0f |
double |
- Default Type of Decimal Values - Double-Precision 64-bit IEEE 754 Floating Point - Currency 와 같은 정밀한 값을 처리할 때는 절대 사용하면 안된다. (이 경우 java.math.BigDecimal 이 권고된다.) |
Double-Precision 64-bit IEEE 754 Floating Point |
0.0d |
boolean |
- Boolean Data Type - true , false 오직 두 값만 정의되어 있다.- Simple Flag 를 처리할 때 사용된다. - 1-bit 의 정보를 처리하는 타입이지만, 실제 메모리 크기는 정확히 정의되어 있지 않다. (즉, boolean 의 크기가 1-bit 임이 보장되지 않는다.) |
true / false |
false |
char |
- Single 16-bit Unicode Character | '\u0000' (0) ~'\uffff' (65,535)(Inclusive) |
'\u0000' |
* 2's Complement Representation (2의 보수 방식) (URL)
* IEEE 754 Floating Point Format (IEEE 754 부동 소수점수 저장 형식) (URL)
Java Reference Data Types (자바 참조 데이터 타입)
* Java Reference Type (자바 참조 타입) (URL)
Literal (리터럴)
- 코드상에서 프로그래머가 Hard-Coding(직접 입력)한 값을 의미한다.
- Java에서는 리터럴을 작성할 때, 아래와 같은 Prefix 혹은 Postfix를 명시해야 한다:
- Binary Integer Literal (2진수 정수형 리터럴)
- 0b 또는 0B로 시작하고, 0과 1로 작성
- Octal Integer Literal (8진수 정수형 리터럴)
- 0으로 시작하고, 0~7 사이의 숫자로 작성
- Decimal Integer Literal (10진수 정수형 리터럴)
- Prefix 없이, 소수점이 없는 0~9 사이의 숫자로 작성
- Hexadecimal Integer Literal (16진수 정수형 리터럴)
- 0x 또는 0X로 시작하고, 0~9 사이의 숫자나 A~F 또는 a~f 사이의 알파벳으로 작성
- long Type Integer Literal (long 타입 정수형 리터럴)
- 소수점이 없는 0~9 사이의 숫자로 구성된 64-bit 정수의 마지막에 l 또는 L을 붙여 작성한다.
- 컴파일러는 정수 리터럴의 Default Type을 int 로 두기 때문에, long 타입은 Postfix(l 또는 L)를 명시해야 한다. - char Type Literal (char 타입 리터럴; 문자형 리터럴)
- 0~65535 사이의 유니코드 문자를 Single Quotation(' ')으로 감싸서 작성한다.
- 문자를 유니코드로 명시해도 되고, 문자 그대로 명시할 수도 있다. (65 또는 'A')
- String Type Literal (String 타입 리터럴; 문자열형 리터럴)
- 문자들을 Double Quotation(" ")으로 감싸서 작성한다.
- 3개의 Double Quotation(""" """)으로 감싸서 텍스트 블록으로 표현할 수도 있다. (Java 13)
(Text Block로 표현하면 Escape와 Line Feed할 필요 없이, 다중행이 작성된 형태 그대로 저장된다.)
(Java 14부터는 Text Block 내에서 문장 끝에 \ (백슬래시)를 붙여 개행하지 않도록 지시할 수 있게 되었다.)
- 이때, 문자열은 유니코드로 변환되지 않는다.
- String 타입은 Primitive Type에 포함되지 않으며, Reference Type이다.
- Floating Point Literal (실수형 리터럴)
- 거듭제곱은 e 또는 E를 통해 표현한다.
- 컴파일러는 실수 리터럴의 Default Type을 double로 두기 때문에, float 타입은 Postfix(f 또는 F)를 명시해야한다. - Boolean Literal (논리형 리터럴)
- 참과 거짓을 의미하는 논리형 리터럴은 true와 false로 표현한다.
Escape Sequence (이스케이프 시퀀스)
Escape Sequence (이스케이프 시퀀스) |
Description (의미) |
\t |
- Tab (탭) |
\b |
- Backspace (백스페이스) |
\n |
- Newline (다음 문장의 첫 부분) |
\r |
- Carriage Return (현재 문장의 첫 부분) |
\f |
- Form Feed (다음 페이지의 첫 부분) |
\' |
- Single Quotation (홑따옴표) |
\" |
- Double Quotation (쌍따옴표) |
\\ |
- Backslash (백슬래시) |
Example. Literal Usage (리터럴 사용 예시)
// int Type Literals (32비트 정수형 리터럴)
int bin_x = 0b1011; // 2진수 1011 (10진수 11)
int bin_y = 0B10100; // 2진수 10100 (10진수 20)
int oct_x = 013; // 8진수 13 (10진수 11)
int oct_y = 0206; // 8진수 206 (10진수 134)
int dec_x = 12; // 10진수 12
int dec_y = 365; // 10진수 365
int hex_x = 0xB3; // 16진수 B3 (10진수 179)
int hex_y = 0X2A0F; // 16진수 2A0F (10진수 10767)
// long Type Literals (64비트 정수형 리터럴)
long err_long = 1000000000000; // Error (정수 리터럴의 기본값은 int형이므로 에러 발생)
long exc_long = 1000000000000L; // Good
// char Type Literals (유니코드 문자형 리터럴)
char ch1 = 'A';
char ch2 = 65; // 'A'와 동일
char ch2 = '가';
char ch4 = 44032 ; // '가'와 동일
char err_ch = ''; // Error (Empty Character의 대입으로 인해 에러 발생)
// Floating Point Literal (실수형 리터럴)
double var = 3.14;
double var = 314e-2; // 314 * 10^{-2}
float var = 3.14f; // float Type (4-Byte)
float var = 3E6F; // float Type (4-Byte)
Reference: Oracle, Primitive Data Types, URL, 2023년 1월 7일 검색
Reference: Oracle, Characters, URL, 2023년 2월 4일 검색
Reference: 신용권, 임경균; 이것이 자바다(개정판); 한빛미디어; 2022