형변환 연산자
" 타입의 일치를 위해 "
코딩을 하다보면 같은 타입뿐 아니라 서로 다른 타입 간의 연산을 수행해야 하는 경우가 있다.
이럴 때 연산을 수행하기 전에 타입을 일치시켜야 하는데 변수나 리터럴의 타입을 다른 타입으로 변환하는 것을 말한다.
규칙 1 . 두 피연산자의 타입을 같게 일치시킨다 ( 보다 큰 타입으로 일치 )
피연산자의 값의 손실을 최소화하기 위함
long + int → long + long = long
float + int → flaoat + float = float
double + float → double + double = double
규칙 2. 피연산자의 타입이 int 보다 작은 타입이면 int로 변환시킨다.
char이나 short가 표현 범위가 좁아서 overflow 발생 방지를 위함
byte + short → int + int = int
char + short → int + int = int
변환되는 과정
5 / 2 = 2 ▶ 5 / (float) 2 → 5 / 2.0f →5.0f / 2.0f → 2.5f
- 자동 형 변환
컴파일러가 자동적으로 해주는 형 변환
" 기존의 값을 최대한 보존할 수 있는 타입으로 자동 형변환된다 "
그래서 표현범위가 좁은 타입에서 넓은 타입으로 형변환하는 경우에는 값 손실이 없으므로
두 타입 중에 표현범위가 더 넓은 쪽으로 형변환 된다.
- 강제 형 변환
큰 그릇에서 작은 그릇으로 변환할 때 사용되며 캐스팅 연산자가 필요하다. ex ) (short)변수명, (int)변수명 등
- 데이터의 손실 가능성이 있음
명시적 형 변환이라고도 하며 값을 충분히 담을 수 있으면 손실이 일어나지 않는다.
Error 컴파일 에러
아래의 코드를 컴파일하면 에러가 발생한다.
- a 와 b는 모두 int형보다 작은 byte형이기 때문에 연산자 '+'는 이 두 개의 피연산자들의 자료형을 int형으로 반환한 다음 연산을 수행한다.
→ 그래서 a + b의 연산결과는 byte형이 아닌 int형이다.
→ int (4byte)의 값을 byte (1byte)타입의 변수에 형변환 없이 저장하려 했기 때문에 에러 발생..
" 큰 자료형의 값을 작은 자료형의 변수에 저장하려면 명시적으로 형변환 연산자를 사용하여 변환해 주어야 한다. "
' byte c = a + b; ' → ' byte c = (byte)(a + b); ' 로 변경하면 컴파일 에러가 발생하지 않는다.
'Programming > Java' 카테고리의 다른 글
[Java] 반복문 (for, while) 개념 및 활용 예제 (1) | 2020.04.13 |
---|---|
[Java] 조건문 (if, switch) 개념 및 활용 예제 (0) | 2020.04.13 |
[Java] 연산자 (Operator) (0) | 2020.04.12 |
[Java] 변수 (Variable), 자료형 & 참조형, Stack & Heap (0) | 2020.04.12 |
[Java] public static void main(String [] args) 의미 알아보기 (3) | 2020.04.12 |