타입 캐스팅(Typecasting)은 C 언어에서 하나의 데이터 타입을 다른 데이터 타입으로 변환하는 방법입니다. 프로그래밍 과정에서 서로 다른 자료형 간의 연산이 필요할 때 매우 유용하게 활용됩니다.
C 언어의 타입 캐스팅은 크게 두 가지 방식으로 나뉩니다.
1. 암시적 타입 캐스팅 (Implicit Type Casting)
암시적 타입 캐스팅은 컴파일러가 자동으로 수행하는 형변환입니다. 하나의 표현식 안에 두 개 이상의 서로 다른 데이터 타입 변수가 함께 사용될 경우, 컴파일러는 데이터 손실을 방지하기 위해 자동으로 데이터 타입을 변환합니다.
일반적으로 작은 크기의 타입이 더 큰 크기의 타입으로 변환되며, 예를 들어 char → int → float 순으로 승격(promotion)됩니다.
예제 코드
#include <stdio.h>
int main() {
int a = 10;
char b = 'S';
float c = 2.88;
a = a+b;
printf("Implicit conversion from character to integer : %d\n",a);
c = c+a;
printf("Implicit conversion from integer to float : %f\n",c);
return 0;
}실행 결과
Implicit conversion from character to integer : 93 Implicit conversion from integer to float : 95.879997
위 예제에서 문자 'S'는 아스키 코드 값 83으로 자동 변환되어 정수 10과 더해져 93이 되었고, 이후 정수 93은 실수형으로 변환되어 95.879997이 출력된 것을 확인할 수 있습니다.
2. 명시적 타입 캐스팅 (Explicit Type Casting)
명시적 타입 캐스팅은 사용자가 직접 수행하는 형변환으로, 일반적으로 '타입 캐스팅'이라고 하면 이 방식을 의미합니다. 사용자가 원하는 데이터 타입으로 값을 강제로 변환할 때 사용합니다.
문법
(type) expression
괄호 안에 변환하고자 하는 데이터 타입을 명시하고, 그 뒤에 변환할 표현식을 작성합니다.
예제 코드
#include <stdio.h>
int main() {
float c = 5.55;
int s = (int)c+1;
printf("Explicit Conversion : %d\n",s);
return 0;
}실행 결과
Explicit Conversion : 6
위 예제에서 실수 5.55는 (int) 캐스팅을 통해 소수점 이하가 버려진 정수 5로 변환되며, 여기에 1을 더해 최종적으로 6이 출력됩니다.
마무리
암시적 타입 캐스팅은 편리하지만 개발자의 의도와 다르게 동작할 수 있으므로 주의가 필요하며, 명시적 타입 캐스팅을 활용하면 데이터 변환 과정을 보다 명확하게 제어할 수 있습니다. 두 방식의 차이를 정확히 이해하고 상황에 맞게 활용하는 것이 안전한 C 프로그래밍의 기본입니다.