![[자바 #4] 오버플로우와 언더플로우](https://image.inblog.dev?url=https%3A%2F%2Finblog.ai%2Fapi%2Fog-custom%3Ftitle%3D%255B%25EC%259E%2590%25EB%25B0%2594%2B%25234%255D%2B%25EC%2598%25A4%25EB%25B2%2584%25ED%2594%258C%25EB%25A1%259C%25EC%259A%25B0%25EC%2599%2580%2B%25EC%2596%25B8%25EB%258D%2594%25ED%2594%258C%25EB%25A1%259C%25EC%259A%25B0%26tag%3DTemplate%2B1%26description%3D%26template%3D3%26backgroundImage%3Dhttps%253A%252F%252Fsource.inblog.dev%252Fog_image%252Fdefault.png%26bgStartColor%3D%25233f0707%26bgEndColor%3D%25233f0707%26textColor%3D%2523000000%26tagColor%3D%2523000000%26descriptionColor%3D%2523000000%26logoUrl%3D%26blogTitle%3DGyeongwon%2527s%2Bblog&w=2048&q=75)
오버플로우란 타입이 허용하는 최대값을 벗어나는 것을 말한다. 반대로 언더플로우는 타입이 허용하는 최소값을 벗어나는 것을 말한다. 정수 타입 연산에서 오버플로우 또는 언더플로우가 발생되면 실행 에러가 발생할 것 같지만, 그렇지 않고 해당 정수 타입의 최솟값 또는 최대값으로 되돌아간다.
byte value = 127;
value++;
System.out.println(value); // -128
byte 타입일 경우 최대값 127에서 1을 더하면 128이 되어 오버플로우 발생하고, 연산 결과는 최소값인 -128이 된다.
byte value = -128;
value--;
System.out.println(value); // 127
마찬가지로 -128에서 1을 빼면 -129가 되어 언더플로우가 발생하는데, 연산 결과는 최대값인 127이 된다. 그리고 다시 1을 빼면 126이 된다.
연산 과정 중에 발생한느 오버플로우와 언더플로우는 우리가 기대하는 값이 아니다. 만약 연산 과정에서 int 타입에서 오버플로우 또는 언더플로우가 발생될 가능성이 있다면 long 타입으로 연산을 하도록 해야한다.
Share article