λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ–₯️/C#

[C#] μΊμŠ€νŒ…(Casting)κ³Ό Convert 클래슀

by HanaV 2023. 10. 19.
728x90
 
 

데이터 νƒ€μž… κ°„μ˜ λ³€ν™˜

 

μ•”μ‹œμ  λ³€ν™˜ (Implicit Conversion)

μ •μˆ˜λŠ” μ‹€μˆ˜μ΄λ‹€.
이 말은 λ§žλŠ” 말이닀. μ™œλƒν•˜λ©΄ μ •μˆ˜λŠ” μ‹€μˆ˜μ— ν¬ν•¨λ˜κΈ° λ•Œλ¬Έμ΄λ‹€.

이렇듯 λ²”μœ„κ°€ 더 큰 데이터 νƒ€μž…μœΌλ‘œ λ³€ν™˜ν• λ•ŒλŠ” 데이터 손싀이 μ—†κΈ° λ•Œλ¬Έμ—, λ”°λ‘œ 무언가λ₯Ό μ•ˆν•΄μ€˜λ„ λ³€ν™˜μ΄ μžλ™μœΌλ‘œ μˆ˜ν–‰λœλ‹€.

int 보닀 더 큰 λ²”μœ„μ˜ μ •μˆ˜μΈ long, μ‹€μˆ˜λ²”μœ„μΈ float와 double은 λ”°λ‘œ λ³€ν™˜μ„ μ•ˆν•΄μ£Όμ–΄λ„ intν˜•μ΄ μžλ™μœΌλ‘œ λ³€ν™˜λ˜λŠ” 것을 λ³Ό 수 μžˆλ‹€.

 

λͺ…μ‹œμ  λ³€ν™˜ (Explicit Conversion)

λ°˜λŒ€λ‘œ 'μ‹€μˆ˜λŠ” μ •μˆ˜μ΄λ‹€.' 이 말은 틀리닀. 
μ‹€μˆ˜λ₯Ό μ •μˆ˜λ‘œ λ³€ν™˜μ‹œν‚€λ €λ©΄ μ†Œμˆ˜μ μ΄ μ‘΄μž¬ν•˜λŠ” 경우 λ²„λ €μ•Όν•˜κ³ , μ˜¬λ¦Όν• μ§€ 버림할지도 μ •ν•΄ν–ν•œλ‹€.

μ΄λ ‡κ²Œ λ°μ΄ν„°μ˜ 손싀이 λ°œμƒν•˜λŠ” 경우의 λ³€ν™˜μ„ λͺ…μ‹œμ  λ³€ν™˜μ΄λΌκ³  ν•œλ‹€. 이 λ³€ν™˜μ€ μˆ˜λ™μœΌλ‘œ μ§„ν–‰λ˜μ–΄μ•Ό ν•œλ‹€.
λͺ…μ‹œμ μœΌλ‘œ λ³€ν™˜ν•˜λŠ” λ°©λ²•μ—λŠ” 크게 μΊμŠ€νŒ…κ³Ό Convert클래슀λ₯Ό μ‚¬μš©ν•˜λŠ” 방법이 μžˆλ‹€.

 

μΊμŠ€νŒ… (Casting)

μœ„μ²˜λŸΌ κ΄„ν˜Έ μ•ˆμ— λ³€ν™˜μ‹œν‚€κ³ μž ν•˜λŠ” 데이터 ν˜•μ‹μ„ λ„£λŠ” 것을 μΊμŠ€νŒ…μ΄λΌκ³  ν•œλ‹€. κ°€μž₯ 기본적이고 μ‰¬μš΄ 방법이닀.

 

Convert 클래슀

Convert ν΄λž˜μŠ€λŠ” μœ„μ™€ 같이 λ‹€μ–‘ν•œ 데이터 ν˜•μ‹ κ°„μ˜ λ³€ν™˜μ„ μˆ˜ν–‰ν•˜λŠ” λ©”μ„œλ“œλ₯Ό μ œκ³΅ν•œλ‹€.

 

두 λ³€ν™˜ λ°©λ²•μ˜ 차이점은?

1. μ†Œμˆ˜μ  λ²„λ¦¬λŠ” 방식

μΊμŠ€νŒ…μ€ μ†Œμˆ˜μ μ„ λ‹€ 버리고, Convert ν΄λž˜μŠ€λŠ” λ°˜μ˜¬λ¦Όμ„ ν•œλ‹€.

Console.WriteLine((int)5.4); //5
Console.WriteLine((int)5.5); //5
Console.WriteLine((int)5.6); //5

Console.WriteLine(Convert.ToInt32(5.4)); //5
Console.WriteLine(Convert.ToInt32(5.5)); //6
Console.WriteLine(Convert.ToInt32(5.6)); //6

2. μ˜ˆμ™Έ λ°œμƒμ‹œν‚€λŠ” 방식

μΊμŠ€νŒ…μ€ 값을 λ³€ν™˜μ‹œν‚¬ 수 없어도 μ–΅μ§€λ‘œ μ΄μƒν•œ κ°’μœΌλ‘œ λ³€ν™˜μ‹œμΌœμ„œ μ—λŸ¬κ°€ λ‚˜μ§„ μ•ŠλŠ”λ‹€.
ν•˜μ§€λ§Œ Convert ν΄λž˜μŠ€λŠ” λ³€ν™˜μ‹œν‚¬ 수 μ—†μœΌλ©΄ μ˜ˆμ™Έλ₯Ό λ°œμƒμ‹œν‚¨λ‹€.

int intValue = 300;
Console.WriteLine((byte)intValue); //44
Console.WriteLine(Convert.ToByte(intValue)); //Unhandled exception. System.OverflowException

int negativeValue = -300;
Console.WriteLine((uint)negativeValue); //4294966996
Console.WriteLine(Convert.ToUInt32(negativeValue)); //Unhandled exception. System.OverflowException

ByteλŠ” 0~255κΉŒμ§€μ˜ κ°’λ§Œ λ‚˜νƒ€λ‚Ό 수 있기 λ•Œλ¬Έμ—, 300을 byte둜 λ³€ν™˜μ‹œν‚€λŠ” 것은 λΆˆκ°€λŠ₯ν•˜λ‹€. ν•˜μ§€λ§Œ μΊμŠ€νŒ…μ„ κ°•μ œλ‘œ μ‹œν‚€λ©΄ 300%256을 κ³„μ‚°ν•œ 결과인 44κ°€ λ‚˜μ˜€κ²Œ λœλ‹€. 반면, Convertν΄λž˜μŠ€λŠ” μ•„μ˜ˆ Exception을 throwν•œλ‹€.

uintλŠ” μ–‘μˆ˜λ§Œμ„ λ‚˜νƒ€λ‚΄λŠ” 데이터 νƒ€μž…μ΄κΈ° λ•Œλ¬Έμ— μŒμˆ˜λŠ” uint둜 ν‘œν˜„ν•  수 μ—†λ‹€. κ°•μ œλ‘œ μΊμŠ€νŒ…μ„ μ‹œν‚€λ©΄ μ˜€λ²„ν”Œλ‘œμš°λ˜μ–΄μ„œ μ΄μƒν•œ 값이 λ‚˜μ˜€κΈ΄ λ‚˜μ˜€μ§€λ§Œ, Convert 클래슀λ₯Ό μ‚¬μš©ν•˜λ©΄ Exception을 throwν•œλ‹€.

728x90

"); wcs_do();