์ด ๊ธฐ์ฌ์์๋ Java์์ long์ int ๋ก ๋ณํํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช
ํ๊ณ ๋ช ๊ฐ์ง ์ฝ๋ ์์ ๋ฅผ ์์ฑํฉ๋๋ค. long ์ int ๋ณด๋ค ๋ ํฐ ๋ฐ์ดํฐ ์ ํ์ด๋ฏ๋ก ์ฌ๊ธฐ์๋ ์ด๋ฌํ ๋ณํ์ ์ํด ์ ํ ์บ์คํ
์ ์ฌ์ฉํด์ผ ํฉ๋๋ค. Java์์ long ๊ณผ int๋ ๋ชจ๋ ๊ธฐ๋ณธ ๋ฐ์ดํฐ ์ ํ์์ ์ด๋ฏธ ์๊ณ ์์ ๊ฒ์
๋๋ค . ์ฆ, ํด๋์ค ๊ฐ์ฒด๊ฐ ์๋๋๋ค. ๋ชจ๋ ๊ฐ์ฒด์ ๋ฐฐ์ด์ ํ ๊ณต๊ฐ์ ์ ์ฅ๋๋ ๋ฐ๋ฉด int ๋ฐ long ๊ณผ ๊ฐ์ ๊ธฐ๋ณธ ์ ํ์ ์คํ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋ฉ๋๋ค. long ๊ณผ int๋ ๋ค์ ๋น์ทํฉ๋๋ค. ์ ์๋ ์์, ์์ ๋๋ 0์ด ๋ ์ ์๋ ์ ์๋ฅผ ์๋ฏธํฉ๋๋ค. ๋ ๋ค ๊ธธ๋ค๋ฐ int ๋ ์ ์ ์ ํ์ด๋ฏ๋ก ์ด๋ ์ ๋ ํธํ๋ฉ๋๋ค. ๋ฌธ์ ๋ long type์ ๋ฒ์๊ฐ -263์์ 263 โ 1 ๋๋ -9223372036854775808์์ 9223372036854775807์ด๋ผ๋ ๊ฒ์
๋๋ค. ์ฆ, Java ํ๋ก๊ทธ๋จ์ long ์ ํ์ ๋ํด 64๋นํธ๋ฅผ ํ ๋นํฉ๋๋ค. ๋์์ int ์ ํ์ 32๋นํธ๋ฅผ ์ฐจ์งํ๋ฉฐ ์ฌ๊ธฐ์๋ -231 ะดะพ 231 - 1 ๋๋ -2147483648์์ 2147483647๊น์ง์ ์ซ์๋ฅผ ์
๋ ฅํ ์ ์์ต๋๋ค . ๊ธด ์ ํ. Java์์ ํ๋ฆฌ๋ฏธํฐ๋ธ๋ก ์์
ํ ๋ ๋ ์ข์ ์ ํ์์ ๋ ๋์ ์ ํ์ผ๋ก์ ๋ณํ์ ์๋์
๋๋ค. ๋ค๋ฅธ ๋ง๋ก ํ์ฅ์ด๋ผ๊ณ ํฉ๋๋ค.
int myInt= 18;
long myLong= 16000;
myLong = myInt;
์ฌ๊ธฐ์๋ ๊ธด ๋ณ์ ์ int๋ฅผ ํ ๋นํฉ๋๋ค . ๋ชจ๋ ๊ฒ์ด ์์กฐ๋กญ๊ฒ ์งํ๋์๊ณ ๋ ํฐ ๋ฒ์์์๋ ๋ ์์ ๋ฒ์๊ฐ ์กฐ์ฉํ ๋ง๊ณ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ ์ธ์๋ ์๋ฌด๊ฒ๋ ์์ง ์์ต๋๋ค. ๊ทธ๊ฑด ๊ทธ๋ ๊ณ , long ์ ํ์ ๋ณ์๋ฅผ ์ ์ธํ๊ณ ๊ทธ ๊ฐ์ ์ ์ํ ๋ ๋ฌธ์ l์ ํ ๋นํ๋ ๊ฒ์ด ์ข์ต๋๋ค . ์ด๊ฒ์ int ๋ฒ์ ๋ฐ์ ์ซ์๋ก ์์
ํ ๋ ์ ์ฉํฉ๋๋ค .
long myVeryLong = 10000000000l;
Java long์์ int๋ก์ ๋ณํ
์ด์ ์ด ๊ธฐ์ฌ์ ์ฃผ์ ์์ ์ธ Java long ์์ int ๋ก์ ๋ณํ์ผ๋ก ๋์๊ฐ ๋ณด๊ฒ ์ต๋๋ค . ๋ฌธ์ ๋ ๋ ํฐ ๊ฒ์ด ํญ์ ๋ ์์ ๊ฒ์ ๋ง์ง ์๋๋ค๋ ๊ฒ์ ๋๋ค. ๋ฐ๋ผ์ ์ฌ๊ธฐ์ ์ฐ๋ฆฌ๋ Java์์ ์๋์ผ๋ก "๋ ์๊ฒ"๋ฅผ "๋ ํฌ๊ฒ"๋ก ๋ฐ๊ฟ ์ ์์ต๋๋ค. ์ด์ ์์์์ ๊ฐ์ด ํ๋ํ๋ ค๊ณ ์๋ํ์ง๋ง ๊ทธ ๋ฐ๋์ ๊ฒฝ์ฐ๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค.
//example without typecastingโฆnice trying!
public static void main(String[] args) {
int myInt= 18;
long myLong= 16000;
myInt = myLong;
}
Java ์ปดํ์ผ๋ฌ๋ ์ด๋ฅผ ํ์ฉํ์ง ์์ผ๋ฉฐ ์ค๋ฅ๋ฅผ ๋ฐ์์ํต๋๋ค. ๋ฐ๋ผ์ ์ด ์์
์ ์ํด typecasting์ด๋ผ๋ ๊ฒ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ์ด ํ๋ก์ธ์ค๋ฅผ ์ถ์ ์ ํ ๋ณํ์ด๋ผ๊ณ ํฉ๋๋ค. ๋ณ์์ ๋ฒ์๋ฅผ ์ขํ๋ ค๋ฉด ๊ฐ์ ์บ์คํ
ํ๋ ค๋ ์ ํ์ ๋ช
์์ ์ผ๋ก ์ง์ ํด์ผ ํฉ๋๋ค. ๋ค์์ int ์ ํ๋์ "์์" long (์ ํฉํด์ผ ํจ)๊ณผ int ๋ฒ์๋ฅผ ๋ฒ์ด๋ ๋ ๊ฐ์ "ํฐ" long ์ซ์๋ฅผ ์
๋ ฅํ๋ ค๊ณ ํ๋ ์์
๋๋ค .
public class longToInt {
public static void main(String[] args) {
int myInt = 18;
long myLong = 16000;
long myVeryLong = 2147483648l;//l in the end means โlongโ
long myVeryLong = 10000000000l;
myInt = (int) myLong;
System.out.println(myInt);
myInt = (int) oneMoreLong;
System.out.println(myInt);
myInt = (int) myVeryLong;
System.out.println(myInt);
}
}
์ฐ๋ฆฌ๋ long ๊ฐ์ int ๋ณ์ ์ ๋ฃ๊ณ ์ถ๋ค๊ณ ์ปดํ์ผ๋ฌ์ ์๋ ธ๊ณ ์ด ๊ฒฐ์ ์ ๊ฒฐ๊ณผ์ ๋ํ ์ฑ
์์ ์ฐ๋ฆฌ์๊ฒ ์์ต๋๋ค. ๋ ์ข์ ์ ํ์ ๋ช
์์ ํ์๋ฅผ ๋ณด๋ ์ปดํ์ผ๋ฌ๋ ๋ณํ์ ์ํํฉ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ต๋๋ค.
16000 -2147483648 1410065408
์, 16000์ ํ์คํ ์ฐ๋ฆฌ๊ฐ ์์ํ๋ ๊ฒ์
๋๋ค. ํ์ง๋ง -2147483648์ ๋ง์ด๋์ค๊ฐ ์๋ ์ด์ ๋ ๋ฌด์์ธ๊ฐ์? ๊ทธ๋ฆฌ๊ณ ์ด 1410065408์ ๋ฌด์์ ์๋ฏธํฉ๋๊น? ์ฌ์ค ์ด๋ฌํ ์ซ์๋ ์ฐ๋ฆฌ๊ฐ ๊ธฐ์ตํ๋ ๊ฒ์ฒ๋ผ 64๋นํธ๋ฅผ ์ฌ์ฉํ๋ ๊ธด ๋ณ์์ ์ ์ฅ๋์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ด ์ซ์๋ฅผ 32๋นํธ๋ง ์ ์ฅํ ์ ์๋ int ๋ณ์ ์ ๋ฃ์ผ๋ ค๊ณ ํฉ๋๋ค . ์ผ๋ฐ์ ์ผ๋ก ์ด 32๊ฐ์ ์
์ ๊ธด ์ซ์ ์ ์ฒ์ 32๋นํธ์์ 0๊ณผ 1์ ํฌํจ ํ๊ณ ๋๋จธ์ง๋ ๋จ์ํ ํ๊ธฐ๋ฉ๋๋ค. ๋ฐ๋ผ์ ์๋ ์ซ์๊ฐ 32๋นํธ์ ๋ง์ง ์์ผ๋ฉด ๋ง์ง ์๋ ๋นํธ๋ ๊ทธ๋ฅ ๋ฒ๋ฆฝ๋๋ค. ์ด๊ฒ์ด 32๋นํธ ๋ฏธ๋ง์ ์ฐจ์งํ๊ธฐ ๋๋ฌธ์ ์ฌ๋ฐ๋ฅธ ์ซ์ 16000๋ง ์๋ ์ด์ ์
๋๋ค.
Java 8 long์์ int๋ก์ ๋ณํ
Java 8์์ Math ํด๋์ค์๋ long์ int ๋ก ๋ณํํ๋ ์๋ก์ด ๋ฉ์๋๊ฐ ์์ต๋๋ค . ์ฌ๊ธฐ์์ด:
Math.toIntExact(value);
์ด ๋ฐฉ๋ฒ์ ๊ฐ์ฅ ์ข์ ์ ์ ๋ณํ๋ ์ซ์์ ๊ธธ์ด๋ฅผ ์ ์ดํ๊ณ ๊ฐ์ด ๋๋ฌด ์ปค์ int ์ ๋ง์ง ์์ผ๋ฉด ์์ธ๊ฐ ๋ฐ์ํ๋ค๋ ๊ฒ์
๋๋ค. ์์ ์์ ์ด๊ฒ์ด ์ด๋ป๊ฒ ์๋ํ๋์ง ๋ด
์๋ค.
public class intToLong {
public static void main(String[] args) {
int myInt = 18;
long myLong = 16000;
long oneMoreLong = 2147483648l;
long myVeryLong = 10000000000l;
System.out.println(Math.toIntExact(myLong));
int y = Math.toIntExact(oneMoreLong);
System.out.println(oneMoreLong);
System.out.println(Math.toIntExact(myVeryLong));
}
}
์ถ๋ ฅ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
16000 ์ค๋ ๋ "main"์ ์์ธ java.lang.ArithmeticException: intToLong.main(intToLong.java:13)์ java.base/java.lang.Math.toIntExact(Math.java:1080)์ ์ ์ ์ค๋ฒํ๋ก
๋ฐ๋ผ์ ํ๋ก๊ทธ๋จ์ ์ ์ผํ๊ฒ ์ฌ๋ฐ๋ฅด๊ฒ ๋ณํ๋ ์ซ์ 16000์ ์ธ์ํ ๋ค์ ๋ฒ์๋ฅผ ๋ฒ์ด๋ ์ซ์ 2147483648l์ int ๋ก ํธ์ํ๋ ค๊ณ ํ ๋ ๋ฉ์๋์์ ์์ธ๊ฐ ๋ฐ์ํ์ต๋๋ค. ๋ฐ๋ผ์ ๊ณ ์ ์ ์ธ Java long ์์ int ๋ก์ ๋ณํ ์ ๊ฒฝ์ฐ์ฒ๋ผ ํ๊ธฐ๋ ๋นํธ ๋ฌธ์ ๊ฐ ์์ต๋๋ค .
GO TO FULL VERSION