암시적 및 명시적 변환
호환되는 형식 사이를 안전하게 변환합니다.
암시적 및 명시적 변환은(는) CoddyKit의 무료 C# Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 C# Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. C# Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
형식 간 변환
C#에서는 한 숫자 형식을 다른 숫자 형식으로 변환할 수 있습니다. 일부 변환은 자동으로 수행되며(암시적 변환), 다른 변환에는 명시적인 캐스트가 필요합니다.
using System;
class Program
{
static void Main()
{
int i = 10;
double d = i; // implicit
int back = (int)d; // explicit
Console.WriteLine(d + ", " + back);
}
}암시적(확장) 변환
데이터가 손실되지 않을 때는 암시적 변환이 허용됩니다. 예를 들어 int에서 long으로, 또는 int에서 double로 변환하는 경우입니다. 캐스트가 필요하지 않습니다.
using System;
class Program
{
static void Main()
{
int i = 42;
long l = i; // widening, safe
double d = i; // widening, safe
Console.WriteLine(l + ", " + d);
}
}확장 변환이 안전한 이유
대상 형식이 원본 형식의 모든 값을 표현할 수 있으므로 컴파일러가 변환을 별도 표시 없이 허용합니다.
using System;
class Program
{
static void Main()
{
byte b = 200;
int i = b; // byte fits in int
Console.WriteLine("byte " + b + " -> int " + i);
}
}명시적(축소) 변환
데이터가 손실될 수 있을 때는 명시적 변환(캐스트)이 필요합니다. 예를 들어 double에서 int로 변환할 때는 (int)value처럼 작성합니다.
using System;
class Program
{
static void Main()
{
double d = 9.78;
int i = (int)d; // truncates toward zero -> 9
Console.WriteLine(i);
}
}캐스팅은 반올림하지 않고 버립니다
부동 소수점 값을 정수로 캐스팅하면 소수 부분이 제거되며 반올림되지 않습니다. 반올림하려면 먼저 Math.Round를 사용하십시오.
using System;
class Program
{
static void Main()
{
double d = 7.99;
Console.WriteLine("Cast: " + (int)d);
Console.WriteLine("Round: " + (int)Math.Round(d));
}
}축소 변환에서의 오버플로
값이 대상 형식에 들어맞지 않으면 일반 캐스트가 조용히 순환할 수 있습니다. 대신 checked로 감싸면 오버플로가 발생할 때 예외를 일으킬 수 있습니다.
using System;
class Program
{
static void Main()
{
int big = 300;
byte wrapped = (byte)big; // 300 wraps to 44
Console.WriteLine("Wrapped: " + wrapped);
try
{
byte safe = checked((byte)big);
Console.WriteLine(safe);
}
catch (OverflowException)
{
Console.WriteLine("checked caught overflow");
}
}
}정밀도 손실
매우 큰 long을 float으로 변환하는 경우처럼, 일부 확장 변환에서도 정밀도가 손실될 수 있습니다. 그래도 이러한 변환은 암시적으로 수행됩니다.
using System;
class Program
{
static void Main()
{
long big = 9007199254740993L;
double approx = big; // implicit, may lose precision
Console.WriteLine("long: " + big);
Console.WriteLine("double: " + approx.ToString("F0"));
}
}문자와 숫자 변환
char는 해당 숫자 코드로 암시적으로 변환되며, 숫자를 char로 명시적으로 캐스팅할 수도 있습니다.
using System;
class Program
{
static void Main()
{
char c = 'A';
int code = c; // implicit -> 65
char next = (char)(code + 1); // explicit -> B
Console.WriteLine(code + " -> " + next);
}
}식에서의 변환
서로 다른 형식을 함께 사용한 산술 연산에서는 연산을 수행하기 전에 작은 형식이 자동으로 더 큰 형식으로 승격됩니다.
using System;
class Program
{
static void Main()
{
int a = 7;
double b = 2;
double result = a / b; // a promoted to double -> 3.5
Console.WriteLine(result);
}
}정수 나눗셈의 함정
두 피연산자가 모두 정수이면 정수 나눗셈이 수행됩니다. 소수 결과를 얻으려면 먼저 하나를 double로 캐스팅하십시오.
using System;
class Program
{
static void Main()
{
int a = 7, b = 2;
Console.WriteLine("int / int: " + (a / b));
Console.WriteLine("with cast: " + ((double)a / b));
}
}종합하기
안전할 때는 암시적 변환을 우선 사용하고, 축소 변환에는 명시적 캐스트를 사용하십시오. 또한 소수 부분 버림, 오버플로, 정수 나눗셈에 주의하십시오.
using System;
class Program
{
static void Main()
{
int total = 17, count = 5;
double average = (double)total / count; // cast to avoid integer division
int rounded = (int)Math.Round(average);
Console.WriteLine("avg=" + average + ", rounded=" + rounded);
}
}빠른 확인
형식 변환에 대한 이해도를 확인해 보십시오.
복습
암시적(확장) 변환은 데이터가 손실되지 않을 때 자동으로 발생합니다(int에서 더 넓은 정수 형식으로, int에서 배정밀도 실수 형식으로 변환하는 경우). 명시적(축소) 변환에는 (int)x와 같은 캐스트가 필요하며 소수 부분이 버려지거나 오버플로가 발생할 수 있습니다. 오버플로를 감지하려면 checked를 사용하고, 정수 나눗셈을 피하려면 배정밀도 실수 형식으로 캐스팅하십시오.
using System;
class Program
{
static void Main()
{
double d = 3.9;
int i = (int)d; // explicit, truncates to 3
long l = i; // implicit widening
Console.WriteLine(i + ", " + l);
}
}자주 묻는 질문
“암시적 및 명시적 변환” 강의는 무료인가요?
네 — “암시적 및 명시적 변환” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 C# Academy 강의 전체를 잠금 해제할 수 있습니다. C# Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“암시적 및 명시적 변환”에서 뭘 배우나요?
호환되는 형식 사이를 안전하게 변환합니다. 브라우저에서 직접 실행하는 실습 코드로 C# Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
C# Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 C# Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“암시적 및 명시적 변환” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 C# Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 C# Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 값 형식과 참조 형식 비교
- 박싱과 언박싱
- 암시적 및 명시적 변환
- Convert 클래스와 구문 분석