[Java] 타입 자동 형변환과 명시적 형변환이란?

김하밍·2024년 6월 20일

Java

목록 보기
45/46

문제

두 정수 사이의 합

타입 자동 형변환을 사용하여 작성한 풀이

public static long solution(int a, int b) throws IOException {
        long sum = 0;
        for (int i = ((a < b) ? a : b); i <= ((a < b) ? b : a); i++) {
            sum += i;
        }

        return sum;
    }

long 타입을 반환해야하는 함수이기 때문에 반환할 변수를 long 타입으로 선언했습니다.
하지만, 연산 과정에서 int형 변수 i를 long 타입의 변수에 누적하여 더하고 있습니다.

이 때, int 타입 변수를 long 타입 변수에 더할 수 있는 이유는 int 타입(32bit 정수)long 타입(64비트 정수) 보다 더 작은 범위를 갖기 때문입니다. 이렇게 더 작은 범위의 변수가 더 큰 범위 변수에 연산되어 담기고자 할 때는 데이터 손실 없이 자동 형변환이 이루어집니다.

명시적 형변환 사용 예시

반대로, 명시적 형변환은 더 큰 데이터 타입이 더 작은 데이터 타입으로 변환될 때 발생합니다. 이 경우 데이터 손실의 위험이 따르기 때문에 개발자가 명시적으로 변환을 지시해야 이루어질 수 있습니다.

long longValue = 1234567890123L;
int intValue = 0;

// 컴파일 오류 발생
// intValue += longValue;

// 개발자가 직접 명시적 형변환 지정
intValue += (int) longValue;

명시적 형변환을 대신하여 두 변수의 타입을 맞추어 연산하기

하지만, 데이터 손실의 위험이 따르기 때문에 int 변수를 long 타입으로 변경하여 두 변수의 타입을 맞추는 방법도 있습니다.

long intValue = 42;
long longValue = 100L;

intValue += longValue;

이 방법이 더 안전하며 데이터 손실의 위험이 없습니다. 가능하면 데이터 손실의 위험이 있는 명시적 형변환을 피하고, 적절한 데이터 타입을 사용하는 것이 좋습니다.

profile
나만의 언어로 기록하며 성장하기 !

0개의 댓글