데이터 타입

Java

목록 보기
2/26
post-thumbnail

1. 타입

1-1 기본(primitive) 타입

  • bit(비트)란? 0과 1을 저장할 수 있는 메모리 기억 공간, 최소 기억 단위,
    8개의 비트를 묶어서 바이트(byte)라고 한다.

✨ java에서 정수의 기본은 int고 실수의 기본은 double이다!✨

1-2. 정수 타입

byte는 -128 부터 127을 저장할 수 있다.
그래서 그 값을 초과하는 값을 저장할 경우 컴파일 에러가 발생한다.

byte b = 128;    >> 컴파일 오류

그런데 실행 중 값이 초과된다면 범위 내에서 다시 시작하게 된다.
무슨 뜻이냐면

byte b = 127;
b++
>> b = -128;      >> 컴파일 오류가 아니라 b가 -128부터 다시 시작한다.
byte a = -128
a--
>> a = 127        >> 컴파일 오류가 아니라 a가 127부터 다시 시작한다. 

1-3. short 타입

2byte(16bit)로 표현되는 정수값을 저장할 수 있는 데이터 타입.

1-4. int 타입

변수에 어떤 진수로 입력을 하더라도 동일한 값이 2진수로 변환되어 저장된다.

1-5. long 타입

int 타입의 저장 범위를 넘어서는 큰 정수는 반드시 소문자 l 또는 대문자 L을 붙여야한다.

long var1 = 1000000000000;      >>컴파일 오류
long var1 = 1000000000000L;     

1-6. 실수 타입

  • double (기본)
  • float (f나 F를 끝에 붙여야 함)
  • 정수 리터럴에 10의 지수를 나타내는 E 또는 e가 포함되어 있을 경우, 실수타입에 저장해야한다.
  • double이 더 정밀도가 높음!
int var6 = 3000000;
double var7 = 3e6;
float var8 = 3e6f;
double var8 = 2e-3;

1-7. 논리 타입

  • boolean (true, false)

2. 타입 변환

2-1. 자동 타입 변환(promotion:프로모션)

  • 프로그램 실행 도중에 작은 타입은 큰 타입으로 자동 타입 변환됨

    ✅ 틀렸던 문제
float var5 = 10;    >> O (자동 타입 변환)
float var6 = 10.0;  >> 컴파일 오류

2-2. 강제 타입 변환(casting:캐스팅)

  • 큰 타입을 작은 타입 다누이로 쪼개고 끝 한 부분만 작은 타입으로 강제 변환
  • 강제 타입을 하더라도 값이 보존되는 것이 중요!
  • 강제 타입 변환 전에 값이 보존될 것인지 검사 예) ↓
if( (i<Byte.MIN_VALUE) || (i>Byte.MAX_VALUE) ) {
		System.out.println("byte타입으로 변환할 수 없습니다");
		System.out.println("값을 다시 확인해주세요");
	} else {
		byte b = (byte) c;
		System.out.println(b);
	}

java에서는 검사를 위한 상수 제공

  • 강제 타입 변환은 결국 이거다! ↓
int i  = 122; 
	byte b = i;   >>컴파일 오류. intbyte보다 크니까.
	byte b = (byte) i;    >>컴파일 오류 생기지 않음.
	System.out.println(b);
  • 정밀도 손실이 발생하지 않도록 정수(int)를 실수로 변환할 때는 되도록 float가 아니라 double로 변환하도록 한다.
  • 연산식에서의 자동 타입 변환 : 두 피연산자 중 크기가 큰 타입으로 자동 변환됨
    (~자세한 건 책에서~)
  • ✅ 중요: java에서 정수의 기본은 int다.
    그래서 byte + byte 연산은 int로 받아야한다.
    char a = 'A';
	int result = a + 1;		  >> 'A'의 유니코드보다 1이 큰 유니코드가 저장됨
	char na = (char) result;  >>'B'가 저장됨

✅ 틀렸던 문제 1

byte byteValue1 = 10;
byte byteValue2 = 20;
byte byteValue3 = byteValue1 + byteValue2;   >>컴파일 오류
int byteValue3 = byteValue1 + byteValue2;    >> O

char charValue1 = 'A';
char charValue2 = 1;
char charValue3 = charValue1 + charValue2;    >>컴파일 오류
int charValue3 = charValue1 + charValue2;    >> O

✅ 틀렸던 문제 2

System.out.println('A' + 'B') = 131
System.out.println('1' + 2) =  51 
System.out.println('1' + '2') = 99  
>> int보다 낮은 타입의 값들은 int로 타입변환되어 연산되기 때문에!
  • 피연산자 중 하나가 long 타이이면 다른 피연산자도 long 타입으로 자동 타입변환된다.
  • 실수 리터럴 + 정수 리터럴 = double로 자동 타입변환된다.
  • float 연산: 두 피연산자가 모두 float일 경우에만.

0개의 댓글