1. 형변환이란
- 서로 다른 타입 간의 대입이나 연산을 할 때 먼저 형변환으로 타입을 일치시키는 것이 원칙이다. 하지만 경우에 따라 편의상의 이유로 형변환을 생략할 수 있다. 그렇다고 형변환이 이루어지지 않는 것이 아니고 컴파일러가 생략된 형변환을 자동적으로 추가해준다.
float f = 1234; // float f = (float)1234;에서 (float)가 생략됨 |
- 위의 문장에서 우변은 int타입의 상수이고 이 값을 저장하려는 변수의 타입은 float이다. 서로 타입이 달라서 형변환이 필요하지만 편의상 생략하였다. float타입의 변수는 1234라는 값을 저장하는데 아무런 문제가 없다.
byte b = 1000; // 에러. byte타입의 범위(-128 ~ 127)를 벗어난 값의 대입 |
- 위의 문장에서 변수가 저장할 수 있는 값의 범위보다 더 큰 값을 저장하려는 경우에는 에러가 발생한다. 에러 메시지는 'incompatible types: possible lossy conversion from int to byte'이다.
byte b = (byte)1000; //그러나 값 손실이 발생해서 변수 b에는 -24가 저장됨 |
- 위의 문장에서 명시적으로 형변환 해줬을 경우 형변환이 프로그래머의 실수가 아닌 의도적인 것으로 간주하고 컴파일러는 에러를 발생시키지 않는다.
2. 형변환을 하는 이유
- 주로 서로 다른 두 타입을 일치시키기 위해서인데 형변환을 생략하면 컴파일러가 알아서 자동적으로 형변환을 한다.
- 기존의 값을 최대한 보존할 수 있는 타입으로 자동 형변환된다.
- 표현범위가 좁은 타입에서 넓은 타입으로 형변환하는 경우에는 값 손실이 없으므로 두 타입 중에서 표현범위가 더 넓은 쪽으로 형변환된다.
- 위 그림처럼 형변환이 가능한 7개의 기본형을 왼쪽부터 오른쪽으로 표현할 수 있는 값의 범위가 작은 것부터 큰 것의 순서로 나열한 것이다.
- 화살표 방향으로의 변환, 즉 왼쪽에서 오른쪽으로의 변환은 형변환 연산자를 사용하지 않아도 자동 형변환이 되며, 그 반대 방향으로의 변환은 반드시 형변환 연산자를 써야 한다.
'Operating System > JAVA' 카테고리의 다른 글
[JAVA] 문자열의 비교 (0) | 2022.04.18 |
---|---|
[JAVA] 연산자의 종류 및 우선순위 (0) | 2022.04.15 |
[JAVA] 상수(constant)와 리터럴(literal) (0) | 2022.04.14 |
[JAVA] 이클립스 자동 완성 기능 (0) | 2022.04.13 |
[JAVA] 이클립스 단축키 (0) | 2022.04.12 |