inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

형변환2 - 명시적 형변환

Casting3 클래스에서 maxIntValue 값

184

soojinkimss

작성한 질문수 58

0

[질문 내용]

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

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

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

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

java 객체지향

답변 2

0

알까기

아쉽게도 컴퓨터가 10진법이 아닌 이진법으로 계산하는 녀석이기 때문에 가능한 일이라 생각합니다. 그대로 뚝 떼서 옮겨도 문제 없는데 형변환 표시를 강제적으로 해야하나 하는 생각이 들 수 있지만 long형태와 int 형태에서 자료를 저장하기 위해 필요한 비트 수 자체가 다릅니다.

인텔리제이 같이 작업환경 내에서 컴파일하기 전에 문제가 있을 부분을 지적해서 이를 대비할 수 있는 것이지 실제 자바 컴파일러가 컴파일 하기 전부터 상황을 전부 알고 융통성있게 행동하지 않기 떄문이라고 생각합니다.

똑같은 양의 물이지만 큰 그릇에서 작은 그릇으로 온전히 옮기려 할 때 깔대기를 쓰는 것 처럼, 일종의 보증이라 생각해도 괜찮다고 생각합니다. 작은 그릇에서 큰 그릇으로 담는 것은 문제가 될 일이 없지만(묵시적 형변환), 큰 그릇에서 작은 그릇으로 담을 때 작은 그릇의 담긴 액체가 넘치지 않는다는 보장은 못하지 않습니까.(명시적 형변환)

1

soojinkimss

쉬운 설명 감사합니다. 덕분에 이해가 좀 되네요~bb

0

인프런 AI 인턴

안녕하세요, 인프런 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 타입으로 변환될 때 정보 손실이 발생할 가능성이 있기 때문에, 프로그래머가 이를 명시적으로 검토하도록 하기 위함입니다.

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

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

0

soojinkimss

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

문제와 풀이4 문제점

0

41

2

문제풀이 시간마다 방향성

0

39

2

피라미드 문제 풀이

0

71

1

ScannerWhile3 예제 코드 질문

0

55

1

짝수 출력 문제 질문

0

50

1

Array 연습 문제 5번 질문입니다.

0

84

2

단축어가 이상하게 나옵니다

0

128

2

Sql강의

0

90

1

array 문제풀이 2번 질문입니다.

0

55

1

JAVA입문 / 메서드편 문제와 풀이2

0

47

1

인텔리제이 무료버젼이 통합되었다는데 30일 무료버전이면 어떻게 사용하나요

1

800

3

OperationEx3에서 꼭 boolean을 써야 하나요?

0

59

1

for, while문 작성

0

65

1

68강 ArrayEx6 클래스 질문

0

60

1

IO.println(String.format("Hello and welcome!"));

0

149

2

소스코드 실행이 안돼요

0

119

2

메서드 문제와 풀이2에서 마지막 문제 이렇게 풀어도 괜찮은 건가요..?

0

79

1

While과 for 스코프 질문

0

63

1

김영한 java 입문 설치 질문

0

137

2

버퍼문제?

0

54

1

for문 피라미드 찍는거 질문

0

78

1

21버전이 없고, 강의 메뉴얼 확인해보면 된다는 김영한 선생님 답변 확인했습니다.

0

373

1

3번 문제 질문 있습니다.

0

99

2

sout에는 변수가 하나만 들어가야 하나요?

0

134

1