인프런 커뮤니티 질문&답변

soojinkimss님의 프로필 이미지
soojinkimss

작성한 질문수

김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음

형변환2 - 명시적 형변환

Casting3 클래스에서 maxIntValue 값

해결된 질문

작성

·

42

0

[질문 내용]

2147483647이 int 타입의 최고값이라고 설명하는 부분에서
long maxIntValue = 2147483647; 이라고 long 타입으로 maxIntValue변수에 값을 초기화하였는데요.

여기서 2147483647을 제가 예시로 int intValue = 2147483647; 라고 초기화를 하면 정상적으로 오류없이 되는데

문제는 maxIntValue를 intValue에 저장할 때 왜 형변환을 해야 하는지 잘 모르겠습니다.

정상적으로 intValue에 2147483647값을 초기화를 했을때는 문제없이 잘 되는데, 어짜피 maxIntValue가 long타입으로 int보다 크고, 애초에 2147483647값이 int의 값 범위 안에 충분히 들어오는 값인데도 불구하고, 저장된 maxIntValue를 intValue안에 넣으면 당연히 정상일 텐데 왜 형변환을 해야 하는지 궁금합니다.

답변 1

0

안녕하세요, 인프런 AI 인턴입니다. soojinkimss님.

질문 주신 내용은 자바의 형변환과 관련된 주제로, long 타입과 int 타입 간의 관계를 이해하기 위해 중요한 내용입니다.

2147483647은 int 타입의 최대 값이며, 이 범위 내의 값은 int 타입으로도 문제없이 사용 가능합니다. 질문에서 언급하신 부분에서 long 타입으로 변경한 이유는, long 타입의 변수가 int 타입보다 더 넓은 범위를 다룰 수 있기 때문입니다. 예를 들어, long maxIntValue = 2147483647;은 문제가 없으나, long 타입은 64비트이며 int 타입은 32비트로 더 작은 저장소를 가지고 있습니다.

따라서 long 타입의 변수를 int 타입으로 변환하려면, 자바에서는 명시적인 형변환(casting)을 통해 데이터 손실이 발생할 수 있음을 의도적으로 체크하도록 요구합니다. 이로 인해 다음과 같은 코드에서 형변환이 필요합니다:

intValue = (int) maxIntValue; // 형변환

형변환을 요구하는 이유는, long 타입의 데이터가 int 타입으로 변환될 때 정보 손실이 발생할 가능성이 있기 때문에, 프로그래머가 이를 명시적으로 검토하도록 하기 위함입니다.

이전에 유사한 질문이 있었습니다. 관련 답변을 추가로 확인하고 싶으시다면 아래 링크를 참고해 주세요:
- 형변환에서 발생하는 문제와 해결 방법

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

soojinkimss님의 프로필 이미지
soojinkimss
질문자

제 말 뜻은 어쨌든 2147483647값이 int 의 값 범위에 속하는데 maxIntValue의 값이 int범위안에속하는 숫자 값인데도 불구하고 자동 형 변환으로 대입이 되어야 하는 식이 빨간 줄로 오류가 뜨고 명시적 형 변환을 하니 오류가 없어지는 겁니다. 답변해주신 말처럼 long타입이 64비트로 저장되어 있으니 int타입이 저장소가 32비트라서 int타입의 값 범위에 속하는 숫자더라도, int타입의 변수에 값을 넣으려면 형 변환을 꼭 해야 한다고 이해하면 될까요?

soojinkimss님의 프로필 이미지
soojinkimss

작성한 질문수

질문하기