Tom's Note
반응형

모든 변수에는 타입이 있으며, 타입에 따라 저장할 수 있는 값범위가 달라진다.

변수 선언할 때, 타입을 도중에 변경할 수 없다.

따라서, 변수를 선언할 때 고려하고 사용해야한다.

▶ 기본 타입(primative) ◀

  • 정수: 양수, 음수로 이루어진 수를 말한다. ex) 0, 10, -3

  • 실수: 정수를 포함한 소수점을 가지는 수를 말한다. ex) 1.2,  -3.14

  • 논리: 0과  1로 상태를 체크하는 수. ex) 진실(true) 혹은(or) 거짓(false) 

 

기본타입에서 세가지로 구분할 수 있다. 조금 더 분류하면, 범위에 따라 타입형을 구분지을 수 있다.

 

정수는 byte, char, short, int, long

실수는 float, double

논리는 boolean

 

아래 표를 통해 구분해보자

값의 종류 기본 타입 메모리 사용크기 저장되는 값의 범위
정수 byte 1byte 8bit -27 ~ 27-1
char 2byte 16bit 0 ~ 216-1 (유니코드:\u0000 ~ \uFFFF)
short 2byte 16bit -215 ~ 215-1
int 4byte 32bit -231 ~ 231-1
long 8byte 64bit -263 ~ 263-1
실수 float 4byte 32bit (+/-)1.4E-45 ~ (+/-)3.4028..E38
double 8byte 64bit (+/-)4.9E-324 ~ (+/-)1.797..E308
논리 boolean 1byte 8bit true, false

범위값과 특성의 궁금증?! 아는 분들은 넘어가 주세요

더보기
  • bit와 byte의 차이는 bit 8개가 하나의 1byte가 되는 것이다. 하나의 표기법이라고 생각하면 된다. 
    1byte == 8bit
  • 정수의 가장 큰 수 뒤에 -1을 한 것은 0을 양수로 카운트 했기 때문에 횟 수를 맞추기 위함이다.
    256/2 -> 128, 음수와 양수를 표현하기 위해 양수의 가장 큰 수를 빼고 0을 포함한 것 128->127, +0
  • char는 문자라고 알고 있는 사람이 많은데 유니코드 자체가 수로 만들어 졌기 때문에 정수에 포함된 것이다.
    또한, 0~127의 정수값은 아스키코드가 할당 되어있다. 

1. 정수 타입

자바는 기본적으로 정수 연산을 int 타입을 수행한다. 기본값으로 사용되기 때문에 왠만하면 int를 사용하는 것이 부하를 아주 조금이라도 줄일 수 있다. 

그런데 의아한 부분이 있을 것이다. 애초에 메모리가 작은 것을 사용하면 되지 않는가? 라는 의문이다. 이유는 값의 범위에 있다. byte와 short 타입을 쓴다면 분명 메모리 효율은 좋을 것이다. 하지만 사용하는 변수의 값이 범위를 넘어가면 잘못된 결과를 얻을 수 있기 때문이다(범위를 넘어선 bit연산으로 잘못된 결과를 초래). 만약, 범위를 넘지 않는다는 것을 가정한다면 short나 byte를 사용하는 것이 바람직하다.

 

  • byte: 8bit로서 최상위 비트 1bit로 음수와 양수를 구분하고 실제 정수값은 7개의 bit로 결정된다.
    참고로 비트연산을 통해 음수값 테스트하기가 편하다.
  • char: 유니코드는 각국의 모든 문자를 담은 것으로 내부적으로 아스키 코드를 담고 있다
    표현은 \u0041, 'A', 65로 변수 값을 저장할 수 있다.
  • short: 자바에서는 잘 사용되지 않지만 C언어와의 호환을 위해 사용된다.
  • int: 8진수, 10진수, 16진수로 표현이 가능하다.
    8진수: 012, 10진수: 10, 16진수: 0xA로 표현 가능하다.
  • long: int의 4byte가 아닌 8byte임을 컴파일러에게 알려주기 위한 목적이다.
    타입을 지정할 때, 반드시 숫자 뒤에 'l', 'L'을 붙여 구분을 해야한다. 안그러면 컴파일 에러가 날 것이다.

2. 실수 타입

자바는 기본적으로 실수 연산을 double 타입을 수행한다. 실수 리터럴을 float 타입 변수에 저장하려면 'f'나 'F'를 숫자 뒤에 붙여야한다.

float과 double의 메모리 크기는 정수의 int와 long의 크기와 같지만 정수 타입과는 다른 저장 방식 때문에 훨씬 큰 범위의 값을 저장할 수 있다. 정수는 기본적으로 2진법으로 표현하지만, 실수는 부동소수점 방식으로 저장된다.

+ m × 10n

+:부호,  m(mantissa): 가수, n(exponent): 지수

ex) 1.234 → 0.1234 × 101: 가수:12345, 지수:1

 

float: 4byte = 부호(1bit) + 지수(8bit) + 가수(23bit) = 32bit 

double: 8byte = 부호(1bit) + 지수(11bit) + 가수(52bit) = 64bit

 

정밀도를 요구할 때, 소수점 뒷자리를 아주 세밀하게 계산 가능한 가수 비트가 큰 double 타입으로 계산하는 것이 좋다. 

 

3. 논리 타입

두가지 상태값을 저장할 필요성이 있을 경우 사용, 주로 상태값에 따라 조건문과 제어문의 실행 흐름을 변경하는데 이용된다.

반응형
profile

Tom's Note

@크크크크

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!