Skip to content

Latest commit

Β 

History

History
39 lines (28 loc) Β· 2.29 KB

README.md

File metadata and controls

39 lines (28 loc) Β· 2.29 KB

Promotion & casting

λ³€μˆ˜μ˜ 데이터 νƒ€μž…μ„ λ°”κΏ”μ£ΌλŠ” νƒ€μž…λ³€ν™˜μ˜ λ°©μ‹μ—λŠ” μžλ™ ν˜•λ³€ν™˜(Promotion)κ³Ό κ°•μ œ ν˜•λ³€ν™˜(Casting)이 μžˆμŠ΅λ‹ˆλ‹€.
μžλ™ ν˜•λ³€ν™˜μ€ λ¬΅μ‹œμ  νƒ€μž… λ³€ν™˜, κ°•μ œ ν˜•λ³€ν™˜μ€ λͺ…μ‹œμ  νƒ€μž… λ³€ν™˜μ΄λΌκ³ λ„ ν•©λ‹ˆλ‹€.

Promotion λ¬΅μ‹œμ  ν˜•λ³€ν™˜(μžλ™ ν˜•λ³€ν™˜)

ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 도쀑에 μžλ™μ μœΌλ‘œ ν˜•λ³€ν™˜μ΄ μΌμ–΄λ‚˜λŠ” κ²ƒμœΌλ‘œ(JVM),
μ•„λž˜ μ½”λ“œμ™€ 같이 μž‘μ€ λ©”λͺ¨λ¦¬μ˜ 크기의 데이터 νƒ€μž…μ„ 큰 λ©”λͺ¨λ¦¬ 크기의 데이터 νƒ€μž…μœΌλ‘œ λ³€ν™˜ν•˜λŠ” ν–‰μœ„λ₯Ό λ§ν•©λ‹ˆλ‹€.

byte a = 10;
int b = a;

μžλ™ ν˜•λ³€ν™˜μ΄ μΌμ–΄λ‚˜λŠ” μˆœμ„œλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

μ£Όμ˜ν•  점은 λ©”λͺ¨λ¦¬ 크기가 큰 데이터 νƒ€μž…μ΄λΌλ„, νƒ€μž… λ²”μœ„λ₯Ό ν¬ν•¨ν•˜μ§€ λͺ»ν•œλ‹€λ©΄ μžλ™ ν˜•λ³€ν™˜μ΄ λΆˆκ°€λŠ₯ν•©λ‹ˆλ‹€.
특히 long 데이터 νƒ€μž…(8byte)μ—μ„œ float 데이터 νƒ€μž…(4byte)으둜 μžλ™ ν˜•λ³€ν™˜(Promotion)이 κ°€λŠ₯ν•©λ‹ˆλ‹€.
ν‘œν˜„ν•  수 μžˆλŠ” κ°’μ˜ λ²”μœ„κ°€ floatκ°€ 더 크기 λ•Œλ¬Έμž…λ‹ˆλ‹€.

Casting λͺ…μ‹œμ  νƒ€μž… λ³€ν™˜(κ°•μ œ ν˜•λ³€ν™˜)

νŠΉμ • 쑰건을 갖좔지 λͺ»ν–ˆμ§€λ§Œ κ°•μ œλ‘œ ν˜•λ³€ν™˜μ„ ν•˜κ³  싢을 λ•Œ μ‚¬μš©ν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€.

int intValue = 1;
byte byteValue = (byte) intValue;

μœ„ μ½”λ“œμ™€ 같이 int 데이터 νƒ€μž…(4byte)을 byte 데이터 νƒ€μž…μœΌλ‘œ λ³€ν™˜ν•˜λ €κ³  ν•  λ•Œ, μ•„λž˜ 그림처럼 μ•žμ— 3byte의 곡간을 μ‚­μ œν•˜κ²Œ λ©λ‹ˆλ‹€.

μž„μ˜λ‘œ 곡간을 μ‚­μ œν•˜κ²Œ λœλ‹€λ©΄ 정상적이지 μ•Šμ„ 값이 λ‚˜μ˜¬ 수 있기 λ•Œλ¬Έμ— μžλ™ ν˜•λ³€ν™˜μ„ ν•˜λ €κ³  ν•˜λ©΄ 컴파일 μ—λŸ¬κ°€ λ°œμƒν•©λ‹ˆλ‹€.
ν”„λ‘œκ·Έλž˜λ¨Έ μ±…μž„ ν•˜μ— 값이 정상적일 것이라고 νŒλ‹¨ν•˜λŠ” 경우, λͺ…μ‹œμ μœΌλ‘œ 데이터 νƒ€μž…μ„ ν‘œκΈ°ν•˜μ—¬ κ°•μ œ ν˜•λ³€ν™˜μ„ μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

ν˜•λ³€ν™˜ μ—°μ‚°

기본적인 사칙연산은 ν”Όμ—°μ‚°μžλ“€μ˜ νƒ€μž…μ΄ 같을 κ²½μš°μ—λ§Œ μˆ˜ν–‰λ˜κΈ° λ•Œλ¬Έμ—, μ„œλ‘œ 데이터 νƒ€μž…μ΄ λ‹€λ₯Ό 경우 두 ν”Όμ—°μ‚°μž 쀑 크기가 큰 νƒ€μž…μœΌλ‘œ μžλ™ ν˜•λ³€ν™˜λœ ν›„ 연산이 μˆ˜ν–‰λ©λ‹ˆλ‹€.
크기가 μž‘μ€ νƒ€μž…μ˜ μ—°μ‚° κ²°κ³Όλ₯Ό μ–»κ³  싢을 경우 κ°•μ œ ν˜•λ³€ν™˜μ„ 톡해 κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.