관심있는 주제/Java

데이터 타입

Lynn123 2018. 11. 8. 15:52
반응형

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의 범위를 넘지 않으니까 본인의 범위 내에서 오류가 뜨지 않는 것이다!)

반응형

'관심있는 주제 > Java' 카테고리의 다른 글

연산자  (0) 2018.11.08
형 변환 (type conversion)  (0) 2018.11.08
주석 & 세미콜론  (0) 2018.11.06
변수  (0) 2018.11.06
숫자와 문자  (0) 2018.11.06