ํผ๋๋ก ๋์๊ฐ๊ธฐ
Dev.toBackend
์๋ฌธ ์ฝ๊ธฐ
Java byte Overflow๋ฅผ ํตํ Loop ์ข ๋ฃ ๋ฉ์ปค๋์ฆ ๋ถ์
Why This Java Loop Is Not Infinite ๐ค
AI ์์ฝ
Context
Java์ Primitive Type์ธ byte์ ์ ํํ ์ ์ฅ ๋ฒ์๋ก ์ธํด ๋ฐ์ํ๋ ์์น์ ํน์ฑ ๋ถ์. ๋ฃจํ ์กฐ๊ฑด์ i < 10๊ณผ ๊ฐ์ ์ฐ์ฐ i--๊ฐ ๊ฒฐํฉ๋์ด ๋ฌดํ ๋ฃจํ์ฒ๋ผ ๋ณด์ด๋ ์ค์ ๋ก๋ ํ์ ํ๊ณ์ ๋ฐ๋ฅธ ๋์ ๋ฐฉ์ ์ฐจ์ด๋ฅผ ๋ณด์.
Technical Solution
- 8-bit signed integer์ธ byte ํ์ ์ ํํ ๋ฒ์(-128 ~ 127) ํ์ฉ
- 0๋ถํฐ ์์ํ๋ ๊ฐ์ ์ฐ์ฐ์ ํตํด ์ต์๊ฐ์ธ -128๊น์ง ๋๋ฌํ๋ ๊ณผ์ ์ค๊ณ
- -128์์ ์ถ๊ฐ ๊ฐ์ ์ ๋ฐ์ํ๋ Integer Overflow ํ์ ์ด์ฉ
- Overflow ๋ฐ์ ์ ๊ฐ์ด ์ต๋์น์ธ 127๋ก Wrap-around ๋๋ Java JVM ํน์ฑ ์ ์ฉ
- i=127 ๋๋ฌ ์ loop condition(i < 10)์ด false๋ก ์ ํ๋์ด ๋ฃจํ๋ฅผ ์ข ๋ฃํ๋ ๊ตฌ์กฐ
์ค์ฒ ํฌ์ธํธ
1. Primitive Type์ ๋ฒ์๋ฅผ ์ด๊ณผํ๋ ์ฐ์ฐ ์ Overflow ๋ฐ์ ๊ฐ๋ฅ์ฑ ๊ฒํ
2. Loop Condition ์ค๊ณ ์ ๋ณ์์ ๋ฐ์ดํฐ ํ์ ๊ณผ ์ฆ๊ฐ ๋ฐฉํฅ์ ๋ ผ๋ฆฌ์ ์ผ์น ์ฌ๋ถ ํ์ธ
3. ์๋์น ์์ Wrap-around ๋ฐฉ์ง๋ฅผ ์ํด ์ ์ ํ ํ์ (int, long) ์ ํ ๋ฐ ๋ฒ์ ์ฒดํฌ ๋ก์ง ์ถ๊ฐ