HwangHub

자바의 형 변환 짚고 넘어가기 본문

DEV-STUDY/Java

자바의 형 변환 짚고 넘어가기

HwangJerry 2024. 1. 15. 19:44

자바에서 다양한 타입 간 연산을 가능하게 하는 중요한 기능 중 하나가 '형 변환'입니다. 형 변환은 데이터의 타입을 다른 타입으로 변환하는 것을 의미합니다. 이번 글에서는 자바의 형 변환에 대해 좀 더 자세히 알아보도록 하겠습니다.

기본형과 참조형의 형 변환

기본적으로 형 변환은 기본형은 기본형끼리, 참조형은 참조형끼리 가능합니다. 예를 들어, int 타입을 double 타입으로, Integer 타입을 Long 타입으로 변환할 수 있습니다.

그러나 기본형과 참조형 간의 형 변환을 구현해야 하는 경우도 있습니다. 이때는 자바에서 지원하는 Wrapper class를 활용할 수 있습니다. 예를 들어, int 타입을 Integer 타입으로 변환하거나, Integer 타입을 int 타입으로 변환하는 것이 가능합니다. 이는 JDK 1.5 이후부터 자바 컴파일러에 의해 자동으로 boxing, unboxing이 되도록 지원되고 있어 편하게 사용할 수 있습니다.

int i = 10;
Integer integer = i; // auto-boxing

Integer integer = new Integer(10);
int i = integer; // auto-unboxing

묵시적 형 변환과 명시적 형 변환

자바에서 형 변환은 묵시적 형 변환과 명시적 형 변환 두 가지 방법으로 이루어집니다.

묵시적 형 변환은 컴파일러가 자동으로 수행하는 형 변환으로, 작은 표현 범위의 타입을 큰 표현 범위의 타입으로 변환할 때 발생합니다. 예를 들어, byte -> int, int -> long, int -> float, float -> double 등의 변환은 모두 묵시적 형 변환에 해당합니다.

int i = 10;
long l = i; // 묵시적 형 변환

반면에 명시적 형 변환은 프로그래머가 직접 형 변환을 지시하는 것으로, 큰 표현 범위의 타입을 작은 표현 범위의 타입으로 변환할 때 필요합니다. 예를 들어, int -> byte, long -> int, float -> int, double -> float 등의 변환은 모두 명시적 형 변환에 해당합니다.

int i = 1000;
byte b = (byte) i; // 명시적 형 변환

명시적 형 변환을 할 때는 주의가 필요합니다. 큰 표현 범위의 타입을 작은 표현 범위의 타입으로 변환하면 데이터 손실이 발생할 수 있기 때문입니다. 따라서 이러한 변환은 필요한 경우에만 사용하고, 가능한 이러한 상황은 피하는 게 좋습니다.

사칙연산에서의 형 변환

사칙연산을 수행할 때도 형 변환이 자동으로 일어납니다. 만약 long + int와 같이 다른 타입 간의 연산이 이루어지면, 표현 범위가 더 넓은 타입으로 결과가 반환됩니다.

int i = 10;
long l = 20;
long result = i + l; // int + long -> long

알지만, 그래도 다시한번

형 변환은 자바에서 다양한 타입 간 연산을 가능하게 하는 중요한 기능입니다. 이를 효과적으로 활용하려면 묵시적 형 변환과 명시적 형 변환에 대하여 분명히 이해하고, 만약 명시적 형 변환을 불가피하게 사용해야 할 경우에는 데이터 손실 가능성을 유념하여 사용해야 합니다.

Comments