[210430] java 기본 자료형
.
java wrapper에 대해 정리하다가 기본 자료형에 관련된 내용을 함께 정리하게 되었는데, 내용이 길어져서 글을 따로 올리게 되었다.
docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html 의 내용 대부분을 번역하여 작성하였다.
1. Primitive Data Types
알다시피, 자바를 사용할 때는 정적으로 모든 변수를 선언해주어야 한다. 자바는 8개의 기본 데이터 타입을 제공한다.
data type | size | description |
byte | 8-bit(-128 ~ 127) | 정수형 변수로 큰 배열에서 메모리를 절약할 때 유용하다. |
short | 16-bit(-32,768 ~ 32,767) | 정수형 변수로 큰 배열에서 메모리를 절약할 때 유용하다. |
int | 32-bit(-2³¹ ~ 2³¹-1) | 정수형의 기본 데이터 타입으로 사용된다. |
long | 64-bit(-2⁶³ ~ 2⁶³-1) | int가 제공하는 것보다 더 큰 범위를 필요로 할 때 사용하는 정수형 변수이다. |
float | (3.4 * 10³⁸) ~ (3.4 X 10³⁸) | IEEE 754 32-bit single-precision를 따르는 부동 소수점 실수형 변수이다. 큰 실수형 배열에서 메모리를 절약해야 할 때 double 대신 사용한다. 값의 오차가 생길 수 있다. |
double | (1.7 * 10³⁰⁸) ~ (1.7 X 10³⁰⁸) | IEEE 754 64-bit double-precision를 따르는 부동 소수점 실수형 변수이다. |
boolean | - | true와 false 두 가지 값만을 저장할 수 있는 변수이다. 간단한 분기 상태를 저장할 때 사용한다. |
char | 16-bit(0 ~ 65,535) | 하나의 유니코드 문자를 저장한다. |
필드에 선언되었으나 초기화되지 않은 변수들은 컴파일러에 의해 기본 값(대체로 0이거나 null)으로 설정된다. 그렇지만, 프로그래밍을 할 때는 명시적으로 변수를 초기화하는 것이 좋다.
data type | default value(for fields) |
byte | 0 |
short | 0 |
int | 0 |
long | 0L |
float | 0.0f |
double | 0.0d |
char | '\u0000' |
boolean | false |
지역 변수의 경우는 다르다. 초기화되지 않은 지역 변수에 컴파일러가 따로 값을 할당해주지 않는다. 그러므로, 지역 변수를 사용할 때 반드시 값을 할당해주어야 한다.
Literals
기본 데이터 타입은 객체가 아니기 때문에, 변수 생성 시 new 키워드를 사용할 필요가 없다. 리터럴은 소스 코드의 고정된 값을 대표한다. 예시로, 아래처럼 기본 데이터 타입 변수에 리터럴을 할당할 수 있다.
boolean result = true;
char capitialC = 'C';
byte b = 100;
short s = 10000;
float f = 1.0f;
1. Integer Literals
byte, short, int, long을 정수 리터럴으로 생성할 수 있다. long의 경우는 리터럴의 맨 끝에 알파벳 L이나 l을 붙인다. 리터럴은 아래 숫자 체계에 따라 표현할 수 있다.
- 10진수 기반으로 0-9를 포함한 숫자
- 16진수 기반으로 0-9, A-F를 포함한 숫자
- 2진수 기반으로 0과 1을 포함한 숫자(Java SE 7 이후 버전에서 생성 가능)
사용 예제는 아래와 같다. 16진수는 '접두사로 0x'를, 2진수는 '0b'를 붙인다.
// The number 26, in decimal
int decVal = 26;
// The number 26, in hexadecimal
int hexVal = 0x1a;
// The number 26, in binary
int binVal = 0b11010;
2. Floting-Point Literals
float의 경우 리터럴의 맨 끝에 F나 f를 붙인다. double의 경우는 선택적으로 D나 d를 붙일 수 있다. 또한, 과학적 표기법에 따라 E나 e를 붙일 수도 있다.
double d1 = 123.4;
// same value as d1, but in scientific notation
double d2 = 1.234e2;
float f1 = 123.4f;
3. Character and String Literals
char 리터럴과 String 리터럴은 대체로 Unicode(UTF-16) 문자를 포함한다. char 리터럴은 작은 따옴표('')를, String 리터럴은 큰 따옴표("")를 사용해서 표현한다.
몇몇 특별한 기호에 대해서는 이스케이프 시퀀스(\)를 사용해서 표현할 수 있다. : \b (backspace), \t (tab), \n (line feed), \f (form feed), \r (carriage return), \" (double quote), \' (single quote), and \\ (backslash)
+. 숫자 리터럴에서 언더바 사용하기
Java SE 7 이후로, 숫자에 언더바(_)를 사용해서 자릿수를 표현할 수 있게 되었다. 정수 리터럴 숫자열을 언더바를 통해 나눠서 볼 수 있으며, 가독성을 높일 수 있다.
public static void main(String[] args) throws IOException {
int tmp2 = 100_000_000;
System.out.println(tmp2);
}
아래와 같이 언더바를 사용할 수 있다.
long creditCardNumber = 1234_5678_9012_3456L;
long socialSecurityNumber = 999_99_9999L;
float pi = 3.14_15F;
long hexBytes = 0xFF_EC_DE_5E;
long hexWords = 0xCAFE_BABE;
long maxLong = 0x7fff_ffff_ffff_ffffL;
byte nybbles = 0b0010_0101;
long bytes = 0b11010010_01101001_10010100_10010010;
언더바는 숫자의 사이에만 사용할 수 있다. 아래와 같은 위치에는 사용할 수 없다.
- 숫자의 맨 앞이나 맨 끝
- 부동 소수점 리터럴의 소수점에 인접한 위치
- F, L 기호 앞
- 기타 String이나 숫자가 올 것으로 예상되는 위치
oracle에서 제공하는 document를 단순히 변역하는 글이 되었다. 알고 있는 내용이었으나, 누군가에게 설명한다는 생각을 하며 직접 정리를 해보니 더 개념을 잘 알 수 있게 되었다. 다음 글에서는 원 목적이었던 wrapper를 정리할 것이다.
- 참고 자료
www.tcpschool.com/java/java_api_wrapper
docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html