자바JAVA의 데이터타입에는 자바에서 기본적으로 제공하는 기본형과 사용자가 지정해 사용하는 사용자 정의 타입이 있다. 기본타입에는 정수형과 실수형, 문자형, 불린형(논리형)이 있다. 형변환은 프로그램 문장에서 데이터 타입을 일시로 변경하는 것이다.
int a = 11, b = 12, c = 13, d = 1; float e = 0; c = (a+b+c)/4 System.out.println ("a와 b와 c와 d의 평균은 "+c+" 이다."); |
a와 b와 c와 d의 합은 37이다. 이것을 나눈 값을 e에 대입한다. 11과 12와 13와 1을 더한 값이 37이므로, 이것을 4으로 나누면 c는 9.25다. 그렇다면 이 프로그램의 실행 결과가 "a와 b와 c의 평균은 9.25 이다."로 출력되는가?
아니다. "a와 b와 c의 평균은 9.0 이다." 라고 출력되는 것을 볼 수 있을 것이다. 일단 뒤의 0.25가 없어진 건 정수끼리 계산하면 정수가 나오기 때문이다. 그런데 대입해야할 좌변의 변수는 실수 타입이다. 어떤 프로그램에서 타입이 다른 것들을 계산할 때는 하나의 타입으로 통일해서 계산한다. 이것을 자동 형변환이라고 한다.
그렇다면 이 프로그램에서는 어떤 타입으로 변환해야 할까? 자동 형변환의 변환 방식은 범위가 큰 쪽으로 통일한다. 수학적으로 정수보다는 실수의 범위가 넓고, 그렇다면 우변이 정수(int)타입이 아니라 실수형(float)타입으로 변환될 것을 예상할 수 있는 것이다. 자동 형변환은 말 그대로 자동으로 이루어지고, 작은 타입에서 큰 타입으로 바뀐다.
자동 형변환의 방향은 이렇다.
byte - short, char - int - long - float - double (오른쪽으로 갈수록 큰 타입)
자동 형변환은 데이터 타입이 다른 피 연산자들끼리 계산할 때 자바JAVA가 자체적으로 수행하는 기능이며, 크기는 작은 데이터 타입에서 큰 데이터 타입으로 변환된다. 그래서 정수형에서 실수형으로 데이터타입이 바뀌는 것이다. 그런데 이때 큰 타입에서 작은 타입으로 변하는 것은 직접 지정해줘야 하는데, 이것을 강제 형변환이라고 부른다.
float f = 20.5f; int a = (int)f; System.out.println("a= "+a); |
프로그램 구문에서 빨간색 글씨로 표시된 것이 바로 강제 형변환이다. 변수 f앞에 (int)가 있는데, 이것은 캐스팅 연산자로, 캐스팅 연산자는 바꾸고 싶은 데이터 타입이다. 괄호 안에 원하는 타입을 써 주면 된다. 위에서는 int, 라고 썼으므로 정수형으로 바꾸고 싶다는 의미다. 그래서 빨간색으로 표시된 코드는 변수 f의 데이터 타입을 int, 즉 정수로 변환하여 저장한다.
자바JAVA구문에서 주의할 점은 강제 형변환 시, 소수점이 날아갈 수 있다. 보다 범위가 작은 데이터타입으로 축소되어 출력되기 때문이다. 그러니까 위의 프로그램의 결과값은 소수점 없이 그냥 20이 되겠다.
공부 외 단상 데이터타입처럼 마음에도 타입이 있고, 너는 나를 항상 강제 형변환하려 든다. 내 마음의 범위를 항상 네 마음의 범위로 맞추려 드는 너. |
'Study Hot > 자바JAVA기초문법' 카테고리의 다른 글
JAVA 분기문(break, continue, return구문) (0) | 2017.03.25 |
---|---|
JAVA 기초문법 반복문, for문과 while의 차이점 (0) | 2017.03.23 |
자바JAVA의 조건문(if ~ then ~ else) (0) | 2017.02.20 |
자바JAVA의 리터럴Literal과 이스케이프Escape 문자 (0) | 2017.02.18 |
자바JAVA문법 기초 (변수와 규칙, 데이터타입과 예약어) (0) | 2017.02.14 |