1. 정수(Integer) 자료형

정수 자료형은 숫자의 범위에 따라 4가지 타입으로 나뉜다.

  • byte : -128 ~ 127 : 1 byte
  • short : -32,768 ~ -32,767 : 2 byte
  • int : -2,147,483,648 ~ 2,147,483,647 : 4 byte
  • long : -9,223,372,036,854,775,808 ~ 생략 : 8 byte
byte byteInteger = 10;
short shortInteger = 5080;
int intInteger = 1280000;
long longInteger = 9876513215;

예전에는 저장장치의 용량이 충분하지 않았기에 저장공간을 효율적으로 사용하기 위해 byteshort도 자주 사용했었지만, 최근에는 기술의 발전 덕에 저장장치의 용량을 딱히 신경쓰지 않아도 되는 시대가 열려, 사실상 intlong만 쓰이게 되었다.

2. 다른 타입끼리 합치면?

// 다른 타입 끼리 합치면 어떻게 되나?
byte byteInteger = 10;
short shortInteger = 20;
int intInteger = 30;
long longInteger = 40;

2-1. byte + short = int

short sum1 = byteInteger + shortInteger; // 오류 short => int로 바꿔야 한다.
java: incompatible types: possible lossy conversion from int to short

2-2. short + int = int

int sum2 = shortInteger + intInteger; // 50

2-3. int + long = long

int sum3 = intInteger + longInteger; // 오류 int => long으로 바꿔야 한다.
java: incompatible types: possible lossy conversion from long to int
long sum4 = intInteger + longInteger; // 70

2-4. 결론

연산에 long이 포함이면 long으로 선언하고, 그 외 나머지 대부분의 경우는 int로 선언하면 된다.

3. 실수(Float) 자료형

float floatNumber = 1.2f; // 1.2
double doubleNumber = 4.3; // 4.3
  • 크기(Memory): float은 4바이트(32비트), double은 8바이트(64비트)를 사용한다.
  • 정밀도(Precision): float은 약 6~7자리(단정밀도), double은 약 15~16자리(배정밀도)의 유효 숫자를 가진다.
  • 표현 범위: doublefloat보다 훨씬 더 큰 실수 범위를 표현할 수 있다.
  • 기본값: 자바에서 실수 리터럴(예: 3.14)은 기본적으로 double 타입으로 취급된다. float 사용 시 숫자 뒤에 f나 F를 붙여야 한다. (예: 3.14f).
  • 용도: 메모리가 제한적인 환경(임베디드, 대규모 배열)에서는 float을, 일반적인 계산에서는 높은 정밀도를 위해 double을 사용한다.

// Java에서 실수형으로 정밀계산은 힘들다.
float floatSum = 0.001f + 0.001f + 0.0001f;
System.out.println(floatSum); // 0.0021000002 이렇게 오차가 있음
profile
매일 성장하는 개발자

0개의 댓글