Assembled by GimunLee (2019-11-19)
- Promotionμ λν΄ μ€λͺ ν μ μλ€.
- Castingμ λν΄ μ€λͺ ν μ μλ€.
- νλ³νν λ λ°μν μ μλ μλ¬μ λν΄ μ€λͺ ν μ μλ€.
Javaμμ μ°μ°μ "2(byte λ°μ΄ν° νμ ) + 3(byte λ°μ΄ν° νμ )" κ³Ό κ°μ΄ λμΌν λ°μ΄ν° νμ μμ κ°λ₯ν©λλ€. νμ§λ§, νλ‘κ·Έλ¨μ λ§λ€λ€ 보면 "2(byte λ°μ΄ν° νμ ) + 3.5(double λ°μ΄ν° νμ )"κ³Ό κ°μ΄ μλ‘ λ€λ₯Έ λ°μ΄ν° νμ λΌλ¦¬μ μ°μ°μ΄ νμν λκ° μμ΅λλ€.
μ΄λ΄κ²½μ° λ³μμ λ°μ΄ν° νμ μ λ°κΏμ£Όλ μμ μ΄ νμνλ°, μ΄κ²μ΄ λ°μ΄ν° νμ μ νλ³ν(νμ λ³ν)μ λλ€. μ΄λ¬ν νλ³ν(νμ λ³ν)μλ ν¬κ² μλ νλ³ν(Promotion) κ³Ό κ°μ νλ³ν(Casting) μ΄ μμ΅λλ€. λ λ€λ₯Έλ§λ‘ μλ νλ³νμ 묡μμ νμ λ³ν, κ°μ νλ³νμ λͺ μμ νμ λ³νμ΄λΌκ³ λ ν©λλ€.
μλ νλ³ν(Promotion)μ νλ‘κ·Έλ¨ μ€ν λμ€μ μλμ μΌλ‘ νλ³ν(νμ λ³ν)μ΄ μΌμ΄λλ κ²μ λ§ν©λλ€. λν, μλ νλ³ν(Promotion)μ μμ λ©λͺ¨λ¦¬ ν¬κΈ°μ λ°μ΄ν° νμ μ ν° λ©λͺ¨λ¦¬ ν¬κΈ°μ λ°μ΄ν° νμ μΌλ‘ λ³ννλ νμλ₯Ό λ§ν©λλ€.
byte a = 10; // μ μ 10μ byte λ°μ΄ν° νμ
μ λ³μμΈ aμ μ μ₯
int b = a; // byte λ°μ΄ν° νμ
μ λ³μμΈ aλ₯Ό int λ°μ΄ν° νμ
μ λ³μμΈ bμμ μ₯
μμ μμ±ν μμμ²λΌ μμ λ©λͺ¨λ¦¬ ν¬κΈ°μ λ°μ΄ν° νμ (byte λ°μ΄ν° νμ )μμ ν° λ©λͺ¨λ¦¬ ν¬κΈ°μ λ°μ΄ν° νμ (int λ°μ΄ν° νμ )μ κ°μ μ μ₯νλ©΄, λ³λ€λ₯Έ λ¬Έλ² μμ΄ νλ³ν(νμ λ³ν)μ΄ μΌμ΄λ©λλ€. μ΄λ¬ν νλ³ν(νμ λ³ν)μ "μλ νλ³ν(Promotion)"μ΄λΌκ³ ν©λλ€
μλ νλ³ν(Promotion)μ΄ μ΄λ£¨μ΄μ§λ μμλ₯Ό μμλ³΄κ² μ΅λλ€.
보μλ©΄, long λ°μ΄ν° νμ μ λ©λͺ¨λ¦¬ ν¬κΈ°λ 8byteμ΄κ³ , float λ°μ΄ν° νμ μ λ©λͺ¨λ¦¬ ν¬κΈ°λ 4byteμΈλ°, long λ°μ΄ν° νμ μμ float λ°μ΄ν° νμ μΌλ‘ μλ νλ³ν(Promotion)μ΄ κ°λ₯ν©λλ€. κ·Έ μ΄μ λ ννν μ μλ κ°μ λ²μκ° floatκ° λ ν¬κΈ° λλ¬Έμ λλ€.
μ£Όμν μ μ λ©λͺ¨λ¦¬ ν¬κΈ°κ° ν° λ°μ΄ν° νμ μ΄λΌλ, νμ λ²μλ₯Ό ν¬ν¨νμ§ λͺ»νλ€λ©΄ μλ νλ³ν(Promotion) μ΄ λΆκ°λ₯ν©λλ€.
- byte λ°μ΄ν° νμ -> char λ°μ΄ν° νμ μλ νλ³ν λΆκ°
- float λ°μ΄ν° νμ -> long λ°μ΄ν° νμ μλ νλ³ν λΆκ°
νΉμ 쑰건μ κ°μΆμ§ λͺ»νμ§λ§, νλ³νμ νκ³ μΆμλ μ¬μ©νλ κ²μ΄ Casting (κ°μ νλ³ν)μ λλ€.
int intValue = 1;
byte byteValue = intValue;
μμ κ²½μ° intValueμ μ μ₯λ 1μ΄λΌλ κ°μ byte λ°μ΄ν° νμ μλ μ μ₯ κ°λ₯ν κ°μ λλ€. κ·Έλ μ§λ§, μ μ½λλ₯Ό μ€ννλ©΄ μ»΄νμΌ μλ¬κ° λ°μν©λλ€. κ·Έ μ΄μ λ μ μ₯λ κ° 1μ μκ΄μμ΄ int λ°μ΄ν° νμ μ΄ byte λ°μ΄ν° νμ λ³΄λ€ λ©λͺ¨λ¦¬ ν¬κΈ°κ° ν¬κΈ° λλ¬Έμ λλ€. κ·Έλ¦ΌμΌλ‘ 보μλ©΄,
μ΄μ κ°μ κ·Έλ¦Όμ΄ λμ΅λλ€. int λ°μ΄ν° νμ μ μ μ₯λ μ μ 1μ κ°μ μ€μ λ©λͺ¨λ¦¬μ μ μ₯λ λ 00000000 00000000 00000000 00000001 μ κ°μ κ°μ§λλ€. μ΄ κ°μ byte λ°μ΄ν° νμ μ λμ 1byte(00000001) μμλ§ λ£μλ μμμλ 3byte (00000000 00000000 00000000) κ°μ΄ λ μκ°λλ€. κ·Έλ¦ΌμΌλ‘ 보면 μ΄λ μ΅λλ€.
μμ 3byteμ 곡κ°μ μμ νλ μμ μμ λ§μ λ°μ΄ν°κ° λ μκ° μ μμ μΈ κ°μ΄ μ μ₯λ μ μμ κ²μ λλ€. μ΄μ κ°μ΄ λ©λͺ¨λ¦¬ ν¬κΈ°κ° ν° int λ°μ΄ν° νμ μμ λ©λͺ¨λ¦¬ ν¬κΈ°κ° μμ byte λ°μ΄ν° νμ μΌλ‘ μλ νλ³ν(Promotion)μ΄ λλ€λ©΄, μ μμ μ΄μ§ μμ κ°μ΄ λμ¬ μ μκΈ° λλ¬Έμ Javaμμ μλ νλ³ν(Promotion)μ νμ§ μμ΅λλ€. νμ§λ§, μ°λ¦¬κ° νλ³ν νλ €λ μ μ κ°μ 1 μ΄λ―λ‘ byte λ°μ΄ν° νμ λ²μ μμ μΆ©λΆν λ€μ΄κ°λ κ°μ λλ€. μ°λ¦° κ·Έκ±Έ λ¨Έλ¦ΏμμΌλ‘ μκ³ μκΈ° λλ¬Έμ byte λ°μ΄ν° νμ μΌλ‘ λ³νλλ€ νλλΌλ κ°μ΄ μ μμ μΌ κ±°λΌκ³ νλ¨ν μ μμ΅λλ€. μ΄λ΄ λ κ°μ νλ³νμ μλμ κ°μ΄ ν΄μ£Όμλ©΄ λ©λλ€.
int intValue = 1;
byte byteValue = (byte) intValue;
+, -, *, / κ³Ό κ°μ κΈ°λ³Έμ μΈ μ¬μΉμ°μ°μ κ°μ νμ μ νΌμ°μ°μ κ°μλ§ μνλκΈ° λλ¬Έμ μλ‘ λ€λ₯Έ λ°μ΄ν° νμ μ νΌμ°μ°μκ° μμ κ²½μ° λ νΌμ°μ°μ μ€ ν¬κΈ°κ° ν° νμ μΌλ‘ μλ νλ³ν(Promotion)λ ν μ°μ°μ΄ μνλ©λλ€. μλ₯Ό λ€μ΄ int λ°μ΄ν° νμ μ νΌμ°μ°μμ double νμ μ νΌμ°μ°μλ₯Ό λ§μ νλ©΄ int λ°μ΄ν° νμ μ νΌμ°μ°μκ° double λ°μ΄ν° νμ μΌλ‘ μλ νλ³ν(Promotion)λκ³ μ°μ°μ΄ μνλ©λλ€. μ°μ°μ κ²°κ³Όλ double λ°μ΄ν° νμ μ΄ λ©λλ€.
int intValue = 10;
double doubleValue = 5.5;
double result = intValue + doubleValue;
// intValue λ³μκ°κ³Ό doubleValue λ³μκ°μ λν΄μ double νμ
μ result λ³μμ μ μ₯
λ§μ½ int λ°μ΄ν° νμ μ μ°μ° κ²°κ³Όλ₯Ό μ»κ³ μΆλ€λ©΄, κ°μ νλ³ν(Casting)λ₯Ό ν΅ν΄ μλμ κ°μ΄ μμ±ν΄μ£Όμλ©΄ λ©λλ€.
int intValue = 10;
double doubleValue = 5.5;
int result = intValue + (int) doubleValue;
// intValue λ³μκ°κ³Ό doubleValueλ³μκ°μ λν΄μ int νμ
μ result λ³μμ μ μ₯