티스토리 뷰
이번 포스팅에서는 Java에서 사용하는 기본적인 Data Type에 대해서 알아보자.
Java는 효율적인 프로그래밍을 하기 위해서 다양한 형태의 Data Type을 가지고 있다.
우선 들어가기 전에 Data의 크기와 관련해서 가볍게 짚고 넘어가자.
Data의 크기
1bit는 0이나 1의 값을 가질 수 있고 byte는 bit 보다 8배 큰 단위다. 그 외에는 모두 1024배씩 커진다.
정수형
Data type | 메모리 크기 | 표현 가능 범위 |
byte | 1 byte | -128 ~ 127 |
short | 2 byte | -32,768 ~ 32,767 |
int | 4 byte | -2,147,483,648~2,147,483,647 |
long | 8 byte | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 |
보편적으로 int를 사용한다. 각기 표현할 수 있는 숫자의 크기가 틀린데,
어떤 것을 사용하느냐에 따라서 메모리 사용량이 상이하기 때문에 상황에 맞게 사용하는 것이 효율적이다.
즉, 변수를 선언할 때 해당하는 메모리만큼을 사용하겠다고 메모리 공간을 미리 할당받는 구조이기 때문에
변수에 들어간 숫자의 크기가 아니라 어떤 type을 선언하느냐에 따라서 할당되는 메모리가 틀려진다.
byte a;
a = 128; // Type Mismatch
short b;
b = 128;
int c;
c = 2147483647;
long d;
d = 2147483647;
// 두 변수 c와 d의 메모리 사용량은 동일하다.
결국, 변수에 들어올 수 있는 숫자의 최대 크기를 잘 판단해서 Data Type을 지정해야 메모리의 용량을 최소화할 수 있다.
하지만 정수를 저장할 때는 int를 사용하는 것이 좋은데, CPU의 처리속도가 빠르기도 하고 충분히 큰 수를 표현할 수
있기 때문이다.
실수형
Data type | 메모리 크기 | 표현 가능 범위 |
float | 4 byte | ±(1.40129846432481707e-45 ~ 3.40282346638528860e+38) |
double | 8 byte | ±(4.94065645841246544e-324d ~ 1.79769313486231570e+308d) |
실수형도 정수형과 동일한 개념이다. 그러나 실수에서는 double을 사용하는 것이 좋다.
그 이유에 대해서는 이번 포스팅 마지막 부분에서 설명하도록 하겠다.
double a;
a = 2.2;
int b;
b = 2.2; // Type Mismatch
문자
문자는 char를 사용하고 2 byte의 메모리를 사용한다. 문자와 문자열은 틀린 Data Type임을 인지해야 한다.
char a;
a = "A";
char b;
b = "AB"; // Type Mismatch
상수
상수(constant)는 변하지 않는 값을 의미한다. 가령,
a = 1;
에서 a 는 변수가 되고 1 은 상수가 되는 것이다. 그러나 한가지 주의할 점이 상수에도 Data Type이 존재한다는 것이다.
아래의 예시를 보자.
public class ConstantDemo {
public static void main(String[] args) {
float a = 2.2;
double b = 2.2;
}
}
2.2는 실수로 우리가 위에서 배웠던 float, double 모두 사용 가능하다. 또한, 값이 두 Data Type이 허용하는
값의 범위 안에 있기 때문에 문제가 되지 않을 것 같지만 실제로 실행시키게 되면 float a = 2.2; 에서 Type Mismatch
Error 가 발생한다. 그 이유는 무엇일까?
마찬가지로 하나의 예를 더 보자.
public class ConstantDemo {
public static void main(String[] args) {
int a = 2147483647;
long b = 2147483637;
}
}
2147483647 은 int가 가질 수 있는 가장 큰 값의 수로 long에서도 사용가능하지만 마찬가지로 long에서
Error가 나오게 된다.
정수와 실수에서 이러한 오류가 발생하는 이유는 바로 상수의 Data Type이 Default로 int와 double로
지정되어 있기 때문이다. 따라서 long과 float을 사용하기 위해서는 별도로 상수에 Data Type을 지정해주어야 한다.
public class ConstantDemo {
public static void main(String[] args) {
float a = 2.2F;
long b = 2147483637L;
}
}
이와 같이 사용하면 Error가 유발되지 않는다. 즉, 상수에도 Data Type이 있음에 주의해야 하고 더불어서 기본적으로
int와 double을 사용하는 것이 사용할 때도 편리하다.
마지막으로 int의 경우에서 int보다 작은 범위 값을 가지는 byte와 short는 값의 범위만 알맞게 지정해준다면
따로 변수에 type을 지정해주지 않고 사용가능하다.
'프로그래밍 > Java 기초' 카테고리의 다른 글
Java (7), 연산자 (0) | 2020.03.31 |
---|---|
Java (6), 형 변환 (0) | 2020.03.31 |
Java (4), 변수 (0) | 2020.02.12 |
Java (3), 숫자와 문자열 (0) | 2020.01.31 |
Java (2), Eclipse와 프로젝트 생성하기 (0) | 2020.01.23 |