🔦 본 포스트는 도서 '이재환의 자바 프로그래밍 입문'을 기반으로 함을 알립니다.
📢 핵심 요약
- 변수는 메모리 공간을 기억하는 용도로 사용된다.
- 자바의 상수에는 리터럴 상수와 final 상수가 있다.
- 자바 컴파일러는 정수형 리터럴 상수를 int형으로 처리한다.
- 자바 컴파일러는 실수형 리터럴 상수를 double형으로 처리 한다.
- 변수에 데이터를 대입할 때와 데이터끼리의 산술 연산을 할 때 형변환이 일어난다.
**상수 풀**
(constant pool)에 자동으로 로딩된다.final double PI = 3.14;
final int MAX_SIZE = 100;
자바에서의 형변환은 변환을 주최하는 것이 컴파일러냐, 프로그래머냐에 따라 두 가지로 구분된다. 다음은 형변환을 말하는 다양한 표현이다.
주최 | 용어 1 | 용어 2 |
---|---|---|
컴파일러(가 자동으로) | 자동 형변환 | 묵시적(암묵적) 형변환 |
프로그래머(가 직접) | 강제 형변환 | 명시적 형변환 |
자동 형변환과 강제 형변환의 예시는 아래 코드를 통해 이해할 수 있다.
public class EX02_TypeChange1
{
public class void main(String[] args)
{
int num1 = 1; // 1) int형 리터럴 상수 1을 int형 변수 num1에 대입
byte num2 = 1; // 2) 자동 형번환. int -> byte
byte num3 = 127; // 2)
byte num4 = 128; // 3) error. 2)의 경우와 달리, 원래 값이 훼손되기 때문에 컴퓨터가 임의로 앞부분을 잘라낼 수 없다.
short num5 = 1; // 2)
num2 = num5; // 4) error. 변수일 경우 작은 값일 수도 있지만 큰 값이 들어올 수도 있으므로, 타입만 비교하고 에러 처리를 한다.
num2 = (byte)num5; // 5) 강제 형번환(명시적 형변환). 변수 안의 값을 알고 있으니 줄여도 된다고 명시적으로 표시한 것.
}
}
다음은 정수→실수 의 형변환 예제이다.
public class Ex_TypeChange2 {
public static void main(String[] args) {
int num1 = 2147483647; // OK
int num2 = 2147483648; // error. int형에서 최대로 표현할 수 있는 값은 2,147,483,647 이다.
long num3 = 2147483648; // error. 자바 컴파일러가 2147483648을 int형으로 인식했기 때문에 에러가 난다.
long num4 = 2147483648L; // OK
float num5 = 1.0; // error. 자바에서 사용하는 실수는 double형이 기본이다.
float num5 = 1.0F; // 명시적 형변환. double -> float
double num7 = 30; // 자동 형변환. int형의 상수 30이 상수 30.0으로 형변환된 후 가장 근사치 값을 계산해 doubl형의 변수에 대입해준다.
}
}
연산을 담당하는 CPU에는 기본 자료형의 수를 계산하는 연산 장치가 있다. 이 장치는 다음과 같이 계산을 한다.
입력 1 | 입력 2 | 결과 |
---|---|---|
int | int | int |
long | long | long |
float | float | float |
double | double | double |
public class Ex04_Calculation1
{
public static void main(String[] args)
{
byte num11 = 1;
byte num12 = 2;
byte result1 = num11 + num12; // error. num11 + num12는 먼저 각각 int로형변환된 후 연산하게 된다.
short num21 = 1;
short num22 = 2;
short result21 = num21 + num22; // error. 위의 경우와 동일
short result22 = (short)(num21 + num22); // 강제 형변환(=명시적 형변환)