1. 정수의 데이터 타입
정수형에는 byte, short, int, long 총 4가지 타입이 있다. (크기순)
이중 int가 가장 처리 속도도 빠르고 충분히 큰 수를 표현할 수 있는 정수형 데이터 타입이다.
데이터 타입별 메모리 크기와 표현 가능 범위
데이터 타입 |
메모리의 크기 |
표현 가능 범위 |
byte |
1바이트 |
-128 ~ 127 |
short |
2바이트 |
-37,768 ~ 32,767 |
int |
4바이트 |
-2,147,483,648 ~ 2,147,483,647 |
long |
8바이트 |
-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,808 |
byte를 예로 본다면, byte는 -128 ~ 127 사이의 수만 표현할 수 있다.
따라서 byte 에 128을 할당한다면 오류가 뜬다.
이때는 byte 보다 표현 가능 범위가 큰 short , int, long을 사용해야 한다.
여기서 알아둬야 할 내용이 있다면, 내가 byte를 쓰는지 short를 쓰는지에 따라서 해당 프로그램을 동작할 때 컴퓨터의 메모리(RAM)를 사용하는 크기가 달라진 다는 것이다. byte는 가장 적은 메모리를 소모하고 long은 가장 많은 메모리를 소비한다. 그런 이유로 작은 숫자를 표현할 때는 byte를 쓰는 것이 메모리 절약에 효율적이라고 볼 수 있다.
(long a = 1; 과 long b = 2124354; 는 같은 메모리를 소모한다. )
어쨌든 정수를 다룰 땐 주로 int를 쓰면 될 것 같다. 왜냐하면 int는 가장 처리 속도가 빠르고 충분히 큰 수를 표현할 수 있기 때문이다!
2. 상수의 데이터 타입
상수는 영어로 constant 라고 하며, 변하지 않는 값을 의미한다.
우리가 int a = 1; 이라고 변수를 선언하고 값을 할당했을 때 , 여기서 a는 변수 (변할 수 있는 것) 이고 1은 상수 값이라고 할 수 있다. 그 이유는 1은 너무도 당연하게 언제나 1이기 때문이다. (1은 2일 수 없고 3일 수 없다.
그리고 유의해야 할 것이 있다면 변수의 type 과 상수의 type은 일치해야 한다.
예시에서 처럼 int(정수)에 2.2 라는 double type의 값을 부여한다면 오류가 뜬다. 또한 int 를 float
이라는 실수 type으로 바꿔주도 오류가 뜬다. (2.2는 사실 실수니까 float을 줬지만 오류가 뜬다!)
double 변수와 double 상수로 type을 일치 시켜주어야 한다.
만약 내가 float에 2.2를 주고 싶다면 뒤에 F 를 붙여주면 된다.
또 다른 예시를 보자! int x에 int의 범위를 넘어가는 수를 부여해 보았다. 당연히 오류가 뜬다.
그래서 int보다 큰 long에 똑같은 값을 할당해 보았다. 여기서 오류가 뜨는 이유는 저렇게 넣을 수 있는 상수는 type이 int라서 그렇다. 정수 type의 수를 long에 매치시키니까 오류가 뜨는 것이다.
따라서 이 값도 위의 실수처럼 뒤에 L을 붙여 명시적으로 지정하면 된다.
long q = 122314; 를 줘 봤는데 오류가 뜨지 않았다. 아마도 상수의 type이 int인데 int의 범위를 넘지 않는 수라서 오류가 뜨지 않는 것 같다. 그래서 다시 int의 범위를 넘는 값을 long에 할당해 봤고 역시 오류가 떴다.
byte 나 short는 자바에서 편의를 위해 int 형 데이터 타입을 허용한다고 한다. 그래서 byte나 short의 범위를 넘지 않는 선에서 에러가 발생하지 않는다.
(생각해보면 너무 당연하다. long에서도 int의 범위를 넘지 않으면 오류가 안 떴었는데 byte나 short는 그 자체로 int의 범위를 넘지 않으니까 본인의 범위 내에서 오류가 뜨지 않는 것이다!)