데이터 타입 또는 자료형은 컴퓨터 과학과 프로그래밍 언어에서 실수치, 정수, 불린 자료형 따위의 여러 종류의 데이터를 식별하는 분류이다. (feat. 위키백과)
기본형의 메모리 저장 방식
- 기본형은 Stack 영역에 실제 값을 저장한다.
- ex)
기본형 종류 (8개)
타입 | 크기(byte) | 값 | 기본값(default) | 기타 |
---|---|---|---|---|
byte | 1 | -128~127 | 0 | |
short | 2 | -32,768~32,767 | 0 | |
int | 4 | -2^31~2^31-1 (약 ±21억) | 0 | 기본 정수 타입 |
long | 8 | -2^63~2^63-1 | 0L | |
float | 4 | 약 7자리의 정밀도 | 0.0f | |
double | 8 | 약 15자리의 정밀도 | 0.0 | 기본 실수 타입 |
char | 2 | 0~65,535 (유니코드 값) | ‘\u0000’ | |
boolean | 1 | true 또는 false | false |
기본형 선언 및 초기화
// 정수 값(리터럴)은 기본적으로 int 타입이다.
// 실수 값(리터럴)은 기본적으로 double 타입이다.
byte b1 = 100; // 출력 : 100
byte b2 = 200; // 컴파일 오류
byte b3 = (byte) 200; // 출력 : -56 -> Overflow
short s1 = 1000; // 출력 : 1000
short s2 = 1_000; // 출력: 1000
int i1 = 100000; // 출력 : 100000
int i2 = 100_000; // 출력 : 100000
long l1 = 123456789L; // 출력 : 123456789 -> L은 값이 long 타입임을 명시함
long l2 = 123_456_789L; // 출력 : 123456789
long l3 = 123456789; // 출력 : 123456789 -> 자동 형 변환 (int -> long)
long l4 = 3_000_000_000; // 컴파일 오류
float f1 = 3.14f; // 출력 : 3.14 -> f는 값이 float 타입임을 명시함
float f2 = 3.14; // 컴파일 오류
float f3 = (float) 3.14; // 출력 : 3.14 -> 명시적 형 변환 (double -> float)
double d1 = 3.141592; // 출력 : 3.141592
double d2 = 100; // 출력 : 100.0 -> 자동 형 변환 (int -> double)
char c1 = 'A'; // 출력 : A
char c2 = 65; // 출력 : A
char c3 = 'a'; // 출력 : a
char c4 = 97; // 출력 : a
boolean bool1 = true; // 출력 : true
boolean bool2 = 0; // 컴파일 오류
boolean bool3 = 1; // 컴파일 오류
기본형 연산
- 연산을 수행할 때, byte, short, char는 모두 int로 변환된다.
byte b = 10; short s = 100; short short_b_s = b + s; // 컴파일 오류 short short_b_s_correct = (short) (b + s); // 출력 : 110 int int_b_s = b + s; // 출력 : 110 char c1 = 'A'; // 유니코드 65 char c2 = 'a'; // 유니코드 97 char char_c1_c2 = c1 + c2; // 컴파일 오류 char char_c1_c2_correct = (char) (c1 + c2); // 출력 : ¢ -> 유니코드 162에 해당하는 문자 int int_c1_c2 = c1 + c2; // 출력 : 162 int i = 32; char char_c1_i = c1 + i; // 컴파일 오류 char char_c1_i_correct = (char) (c1 + i); // 출력 : a int int_c1_i = c1 + i; // 출력 : 97
- 피연산자 중 하나가 더 큰 타입이면, 작은 타입이 큰 타입으로 변환된다.
int i1 = 2_000_000_000; int i2 = 2_000_000_000; int int_i1_i2 = i1 + i2; // 출력 : -294967296 -> Overflow long long_i1_i2 = i1 + i2; // 출력 : -294967296 -> Overflow long long_i1_i2_correct1 = (long) i1 + i2; // 출력 : 4000000000 -> long + int = long long long_i1_i2_correct2 = i1 + (long) i2; // 출력 : 4000000000 double d = 3.14; int i3 = 10; double double_d_i3 = d + i3; // 출력 : 13.14 -> double + int = double