튜토리얼 2장은 자료형에 대한 이야기를 하고 있다.

 

다음은 자바의 기본 자료형들이다.

 

byte       1바이트 정수

short     2바이트 정수

char      2바이트 문자

int         4바이트 정수

long      8바이트 정수

float      4바이트 실수

double  8바이트 실수

 

1. 자동 형변환(type conversion)

 

자료형간의 변환을 할 경우는 어떻게 하는가?

 

상식적으로 byte  의 크기가 1 바이트인데 2바이트의 short 자료를 저장하는 것은 안될 것이다.

 

16bit를 8bit에 저장하기에는 bit수가 모자른다.

 

변환 불가

허나 반대로 8bit를 16bit에 저장은 가능하다.

 

자바는 8bit인 byte 형 변수의 값을 더 큰 자료형에 대입하는 것을 허용한다.

 

실수는 정수보다 정밀도가 높으므로 정수형들은 실수형에 대입이 가능하다.

 

즉 byte -> short -> int -> long -> float -> double 형의 순으로 대입을 할 수 있다.

 

대입문만 사용하면 자동으로 변형된다.

 

연산 중에도 같은 원칙으로 자동 형 변환이 일어난다.

 

int형과 double형을 더하면 double형이 된다.

 

(int1 + double1 -> double 형으로 변환)

 

char 형의 경우 2바이트 문자형이지만 자동 형변환이 된다.

 

[char-> int -> long -> float -> double]

 

char에 인코딩된 숫자값이 전달된다. 문자 'A'는 아스키값이 65 이다.

 

따라서 char 형 변수의 값 'A' 를 int 형 변수에 할당하면 65가 저장된다. 

 

int number = 'A';  // number의 값은 65

 

2. 강제 형 변환

 

* 반대의 경우는 수동으로 형을 변환해야 한다.

 

(byte)처럼 바꿀 형을 괄호로 명시해야 한다. 주의할 점은 16bit를 8bit로 변환한다고 하면 자료의 손실이 발생한다. short 형 변수 128을 byte 형 변수에 대입하면 -128 으로 저장된다. byte의 표현범위는 -128~127 이므로 128을 넘어가는 순간 다시 -128으로 돌아오는 것을 오버플로우라고 한다.(Overflow)

 

강제 형 변환

의도하지 않은 오버플로우는 오류겠지만 숫자가 시계바늘 처럼 돌아가므로 루프제어에 사용할 수도 있다.

오버플로우

 

변환하려는 변수 앞에 (type) 을 사용해서 변환한다. 이쪽은 자동 형 변환과 달리 (type)을 빼먹으면 컴파일 오류가 난다. 특히 여러 자료형을 연산할 때 주의하도록 한다. 자동 형 변환으로 처리되면 의도치 않은 결과가 나올 수 있다. 다른 자료형을 연산하려면 어떤 자료형으로 바꿔서 연산할 것인지 미리 생각을 해둬야 한다.

 

 

공유하기

facebook twitter kakaoTalk kakaostory naver band