CodeGym /Java Blog /๋ฌด์ž‘์œ„์˜ /Java์—์„œ long์„ int๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•
John Squirrels
๋ ˆ๋ฒจ 41
San Francisco

Java์—์„œ long์„ int๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•

๋ฌด์ž‘์œ„์˜ ๊ทธ๋ฃน์— ๊ฒŒ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค
์ด ๊ธฐ์‚ฌ์—์„œ๋Š” 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 ๋กœ์˜ ๋ณ€ํ™˜ ์˜ ๊ฒฝ์šฐ์ฒ˜๋Ÿผ ํ๊ธฐ๋œ ๋น„ํŠธ ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค .
์ฝ”๋ฉ˜ํŠธ
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION