CodeGym /Java Blog /๋ฌด์ž‘์œ„์˜ /์ž๋ฐ” ์œ ํ˜• ์บ์ŠคํŒ…
John Squirrels
๋ ˆ๋ฒจ 41
San Francisco

์ž๋ฐ” ์œ ํ˜• ์บ์ŠคํŒ…

๋ฌด์ž‘์œ„์˜ ๊ทธ๋ฃน์— ๊ฒŒ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค

Java์˜ ์œ ํ˜• ์บ์ŠคํŒ…์ด๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๋ฐ์ดํ„ฐ ์œ ํ˜•์€ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์—…๊ณผ ํ•จ๊ป˜ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ’์˜ ์œ ํ˜•์„ ์ง€์ •ํ•˜๋Š” ๋ฏธ๋ฆฌ ์ •์˜๋œ ๊ฐ’ ์ง‘ํ•ฉ์ž…๋‹ˆ๋‹ค.
Java Type Casting์€ ํ•œ ๋ฐ์ดํ„ฐ ์œ ํ˜•์„ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ์œ ํ˜•์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค์ž…๋‹ˆ๋‹ค.
์ด๋Š” ์•”์‹œ์ ์ผ ์ˆ˜๋„ ์žˆ๊ณ  ๋ช…์‹œ์ ์ผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค . ์ž๋™ ํƒ€์ž… ์บ์ŠคํŒ…์ด๋ผ๊ณ ๋„ ์•Œ๋ ค์ง„ ์•”์‹œ์  ํƒ€์ž… ์บ์ŠคํŒ…์€ ์ปดํŒŒ์ผ๋Ÿฌ์— ์˜ํ•ด ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ๋ช…์‹œ์  ์œ ํ˜• ๋ณ€ํ™˜์€ ์ฝ”๋“œ์—์„œ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ˆ˜๋™์œผ๋กœ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

ํƒ€์ž… ์บ์ŠคํŒ…์ด ํ•„์š”ํ•œ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

Java์—๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ๋‹ค๋ฅธ ๊ณต๊ฐ„์ด ํ•„์š”ํ•œ ๋‹ค์–‘ํ•œ ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ์œ ํ˜•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ํ•œ ๋ฐ์ดํ„ฐ ์œ ํ˜•์˜ ๊ฐ’์„ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ์œ ํ˜•์— ํ• ๋‹นํ•˜๋Š” ๋™์•ˆ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ์œ ํ˜•์ด ์ด๋ฏธ ํ˜ธํ™˜๋˜๋Š” ๊ฒฝ์šฐ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ž๋™์œผ๋กœ ์œ ํ˜• ๋ณ€ํ™˜์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํƒ€์ž… ์บ์ŠคํŒ…์€ ํ”„๋กœ๊ทธ๋žจ์—์„œ ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ์œ ํ˜•์„ ์ฒ˜๋ฆฌํ•  ๋•Œ ์ฃผ์š” ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

Java ์œ ํ˜• ์บ์ŠคํŒ…์˜ ์œ ํ˜•

Java์—๋Š” ๋‘ ๊ฐ€์ง€ ์œ ํ˜•์˜ ์œ ํ˜• ์บ์ŠคํŒ…์ด ์žˆ์Šต๋‹ˆ๋‹ค.
  1. ํ™•๋Œ€ ์œ ํ˜• ์บ์ŠคํŒ… โ€” ์•”์‹œ์  ๋˜๋Š” ์ž๋™ ์œ ํ˜• ์บ์ŠคํŒ…์ด๋ผ๊ณ ๋„ ํ•จ
  2. Narrowing Type Casting - ๋ช…์‹œ์  ๋˜๋Š” ์ˆ˜๋™ ์œ ํ˜• ์บ์ŠคํŒ…์ด๋ผ๊ณ ๋„ ํ•จ

ํ™•ํญํ˜• ์ฃผ์กฐ

ํ™•์žฅํ˜• ํ˜•๋ณ€ํ™˜(Widening typecasting)์€ ์ด๋ฆ„์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด ์ž‘์€ ๋ฐ์ดํ„ฐ ์œ ํ˜•์„ ๋” ํฐ ๋ฐ์ดํ„ฐ ์œ ํ˜•์œผ๋กœ ํ™•์žฅํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ž‘์€ ์œ ํ˜•์„ ํฐ ์œ ํ˜•์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ์ด๋Ÿฌํ•œ ์œ ํ˜• ๋ณ€ํ™˜์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ์œ ํ˜•์€ ์„œ๋กœ ํ˜ธํ™˜๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ˆซ์ž์—์„œ char ๋˜๋Š” ๋ถ€์šธ ์œ ํ˜•์œผ๋กœ์˜ ์•”์‹œ์  ๋ณ€ํ™˜์€ ์—†์Šต๋‹ˆ๋‹ค. Java์—์„œ๋Š” char ๋ฐ boolean ์œ ํ˜•์ด ํ˜ธํ™˜๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๋ฐ”์ดํŠธ -> ์งง์€ -> ๋ฌธ์ž -> int -> ๊ธด -> ๋ถ€๋™ ์†Œ์ˆ˜์  -> ๋”๋ธ”
์ด๋Ÿฌํ•œ ์œ ํ˜•์˜ ์บ์ŠคํŒ…์€ ์ •๋ณด ์†์‹ค ์—†์ด ์ปดํŒŒ์ผ๋Ÿฌ์— ์˜ํ•ด ์ž๋™์œผ๋กœ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋ž˜๋จธ์˜ ์™ธ๋ถ€ ํŠธ๋ฆฌ๊ฑฐ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์˜ˆ

//Automatic type conversion
public class WideningExample {
   public static void main(String[] args) {

       int i = 100;
       System.out.println("int value: " + i);

       // int to long type
       long l = i;
       System.out.println("int to long value: " + l);

       // long to float type
       float f = l;
       System.out.println("int to float value: " + f);


       byte b = 1;
       System.out.println("byte value: " + b);

       // byte to int type
       i = b;
       System.out.println("byte to int value: " + i);

       char c = 'a';
       System.out.println("char value: " + c);

       // char to int type
       i = c;

       // prints the ASCII value of the given character
       // ASCII value of 'a' = 97
       System.out.println("char to int value: " + i);
   }
}

์‚ฐ์ถœ

int ๊ฐ’: 100 int์—์„œ long ๊ฐ’: 100 int์—์„œ float ๊ฐ’: 100.0 byte ๊ฐ’: 1 byte์—์„œ int ๊ฐ’: 1 char ๊ฐ’: char์—์„œ int ๊ฐ’: 97

์„ค๋ช…

์œ„์˜ ์ฝ”๋“œ์—์„œ๋Š” ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ž๋™์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ํ™•์žฅํ˜• ํ˜•๋ณ€ํ™˜์„ ๋ณด์—ฌ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. ์šฐ์„  int , byte ๋ฐ char ์— ๊ฐ’์„ ํ• ๋‹นํ–ˆ์Šต๋‹ˆ๋‹ค . ๊ทธ๋Ÿฐ ๋‹ค์Œ int ๊ฐ’์„ long ๋ฐ float ์— ํ• ๋‹นํ–ˆ๋Š”๋ฐ ๋‘˜ ๋‹ค int ๋ณด๋‹ค ํฝ๋‹ˆ๋‹ค . ๋˜ํ•œ byte ๋ฐ char ๊ฐ’์„ int ์— ํ• ๋‹นํ–ˆ์Šต๋‹ˆ๋‹ค . byte ๋ฐ char ๋Š” ๋ชจ๋‘ int ๋ณด๋‹ค ์ž‘์€ ๋ฐ์ดํ„ฐ ์œ ํ˜•์ด๋ฏ€๋กœ ์ด๋Ÿฌํ•œ ๋ณ€ํ™˜์€ ์•”์‹œ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

ํ˜‘์†Œํ˜• ์ฃผ์กฐ

์ด๋ฆ„์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด Narrowing typecasting์€ ๋” ํฐ ๋ฐ์ดํ„ฐ ์œ ํ˜•์„ ๋” ์ž‘์€ ๋ฐ์ดํ„ฐ ์œ ํ˜•์œผ๋กœ ์ขํžˆ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ํฐ ์œ ํ˜•์„ ์ž‘์€ ์œ ํ˜•์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋ ค๊ณ  ํ•  ๋•Œ ์ด ์œ ํ˜• ๋ณ€ํ™˜์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
double -> float -> long -> int -> char -> short -> ๋ฐ”์ดํŠธ
์ด๋Ÿฌํ•œ ์œ ํ˜•์˜ ์บ์ŠคํŒ…์˜ ๊ฒฝ์šฐ ์ž์ฒด ๋ณ€ํ™˜์„ ์ง€์ •ํ•˜์—ฌ Java์˜ ๊ธฐ๋ณธ ๋ณ€ํ™˜์„ ์žฌ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ๋Œ€์ƒ ๋ฐ์ดํ„ฐ ์œ ํ˜• ์•ž์— ์œ ํ˜• ๋ณ€ํ™˜์ด ํ•„์š”ํ•œ ๋ณ€์ˆ˜ ๋˜๋Š” ๊ฐ’์„ ๊ด„ํ˜ธ '()' ์•ˆ์— ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Ÿฌํ•œ ์œ ํ˜•์˜ ์ฃผ์กฐ๋กœ ์ธํ•ด ์ •๋ฐ€๋„๊ฐ€ ์†์‹ค๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ

//Manual Type Conversion
public class NarrowingExample {
   public static void main(String[] arg) {

       // double data type
       double d = 97.04;
       // Print statements
       System.out.println("double value: " + d);

       // Narrowing type casting from double to long
       // implicitly writing the target data type in () followed by initial data type
       long l = (long) d;

       // fractional part lost - loss of precision
       System.out.println("long value: " + l);

       // Narrowing type casting from double to int
       // implicitly writing the target data type in () followed by initial data type
       int i = (int) l;

       // fractional part lost - loss of precision
       System.out.println("int value: " + i);

       // Narrowing type casting from double to int
       // implicitly writing the target data type in () followed by initial data type
       char c = (char) i;

       // displaying character corresponding to the ASCII value of 100
       System.out.println("char value: " + c);
   }
}

์‚ฐ์ถœ

double ๊ฐ’: 97.04 long ๊ฐ’: 97 int ๊ฐ’: 97 char ๊ฐ’: a

์„ค๋ช…

์ถ•์†Œ ํ˜•๋ณ€ํ™˜์€ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ํ‘œ์ค€ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ช…์‹œ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์œ„ ํ”„๋กœ๊ทธ๋žจ์—์„œ๋Š” long ๋ฐ int ๋ฐ์ดํ„ฐ ์œ ํ˜• ๋ณด๋‹ค ํฐ double ๊ฐ’์œผ๋กœ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค . ์šฐ๋ฆฌ๋Š” ์›ํ•˜๋Š” ๋Œ€์ƒ ๋ฐ์ดํ„ฐ ์œ ํ˜•๊ณผ ํ•จ๊ป˜ ๊ด„ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด double์„ long ๋ฐ int ๋กœ ์œ ํ˜• ๋ณ€ํ™˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ 'int'๋ฅผ 'char'๋กœ ์ˆ˜๋™์œผ๋กœ ์œ ํ˜• ๋ณ€ํ™˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๋ก 

์ด ๊ฒŒ์‹œ๋ฌผ์„ ๋งˆ์น˜๋ฉด์„œ Java Type Casting์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด์…จ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. Java์—์„œ ๋‘ ๊ฐ€์ง€ ์œ ํ˜•์˜ ํ˜•๋ณ€ํ™˜์„ ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ Narrowing typecasting์„ ์‚ฌ์šฉํ•˜์—ฌ ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ ์œ ํ˜•์„ ์ˆ˜๋™์œผ๋กœ ์บ์ŠคํŒ…ํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค. ๋” ๊นŠ์ด ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค๋ฅธ ๊ฐ’์„ ๊ฐ€์ง„ ๋ฐ์ดํ„ฐ ์œ ํ˜•์˜ ๋‹ค๋ฅธ ์กฐํ•ฉ์„ ์ง์ ‘ ์‹œ๋„ํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋…์„ ๋” ๊นŠ์ด ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ๊ณ„์† ์—ฐ์Šตํ•˜์„ธ์š”. ๊ทธ๋•Œ๊นŒ์ง€ ๊ณ„์† ์„ฑ์žฅํ•˜๊ณ  ๋น›๋‚˜์„ธ์š”!
์ฝ”๋ฉ˜ํŠธ
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION