[C언어][초급] Chapter14. 형 변환 (암시적, 명시적) – 자료형을 바꾸는 방법
프로그래밍에서는 서로 다른 자료형끼리 계산하거나 저장하는 일이 자주 발생합니다.
예를 들어 정수와 실수를 더하거나, 큰 자료형에 작은 값을 넣는 상황이죠.
이때 C언어는 **형 변환(type casting)**을 통해 자료형을 자동으로 맞추거나, 직접 바꾸도록 요구합니다.
이번 글에서는 C언어의 형 변환의 종류와 차이점, 그리고 실제 사용 예제를 통해 개념을 쉽게 정리해보겠습니다.
● 형 변환(Type Conversion)이란?
형 변환은 하나의 자료형을 다른 자료형으로 바꾸는 것입니다.
예를 들어, 정수형 int를 실수형 float으로 바꾸거나, 그 반대로 변환할 수 있습니다.
C언어에서는 크게 두 가지 방법으로 형 변환이 일어납니다.
- 암시적 형 변환 (Implicit Type Conversion)
- 명시적 형 변환 (Explicit Type Conversion)
● 암시적 형 변환 (자동 형 변환)
암시적 형 변환은 컴파일러가 자동으로 수행하는 형 변환입니다.
다른 자료형끼리 연산할 때, **손실이 적은 쪽(정밀한 쪽)**으로 자동 변환됩니다.
int a = 5;
float b = 2.0;
float result = a + b; // a가 float으로 자동 변환됨
- int → float 자동 변환
- char → int 자동 변환
- float → double 자동 변환 등
암시적 변환이 발생하는 상황
- 서로 다른 자료형끼리 계산할 때
- 함수에 인자를 전달할 때
- 대입할 때 자료형이 다를 경우
● 명시적 형 변환 (강제 형 변환)
명시적 형 변환은 프로그래머가 직접 원하는 자료형으로 바꾸는 것입니다.
(자료형) 형태로 변수나 값을 감싸서 사용합니다.
int a = 7;
int b = 2;
float result = (float)a / b; // 명시적 형 변환
- 위 코드에서 a를 float로 변환함으로써 정수 나눗셈을 피하고, 결과가 3.5가 됨
- b를 변환해도 마찬가지로 float 연산이 발생함
명시적 형 변환이 필요한 경우
- 정수 나눗셈을 실수 결과로 얻고 싶을 때
- 값 손실을 감수하고 자료형을 바꿔야 할 때
- char를 int로 바꿔 ASCII 값을 확인할 때 등
● 예제 비교: 암시적 vs 명시적
int a = 10;
int b = 4;
float result1 = a / b; // 암시적 변환 없음 → 결과: 2.0
float result2 = (float)a / b; // 명시적 변환 → 결과: 2.5
printf("암시적 변환 결과: %.1f\n", result1);
printf("명시적 변환 결과: %.1f\n", result2);
● 주의할 점
- 정수형에서 실수형으로 변환하면 소수점 아래가 생깁니다.
하지만 실수형에서 정수형으로 바꾸면 소수점 이하는 버려집니다.
float pi = 3.14;
int i = (int)pi;
printf("%d\n", i); // 출력: 3
- 형 변환 시 데이터 손실 가능성이 있다는 점을 기억해야 합니다.
형 변환은 C언어에서 연산 정확도와 데이터 처리의 유연성을 확보하기 위해 필수적인 개념입니다.
컴파일러가 자동으로 처리하는 암시적 변환과, 프로그래머가 직접 지정하는 명시적 변환의 차이를 이해하고, 필요한 상황에 적절히 활용하는 연습이 중요합니다.
실습 문제
아래 문제는 직접 코드를 작성해보고, 실행 결과를 확인한 후 스스로 정답을 유추해보는 형태입니다.
정답은 바로 아래에서 확인할 수 있습니다.
문제 1
정수형 변수 a = 10, b = 3이 있을 때, 나눗셈 결과를 소수로 출력하려면 어떻게 해야 할까요?
printf("결과: %.2f\n", ???);의 ???를 완성하세요.
문제 2
아래 코드의 출력 결과는 무엇일까요?
int x = 5;
float y = 2.0;
float z = x + y;
printf("%.1f\n", z);
문제 3
문자 'A'를 정수형으로 출력하려면 char 변수를 어떻게 변환해야 할까요?
출력 결과는 ASCII 값인 65가 나와야 합니다.
문제 4
아래 코드에서 형 변환을 통해 결과가 2.5가 되도록 수정하세요.
int a = 5, b = 2;
float result = a / b;
문제 5
소수 3.9를 정수형으로 변환해 출력하려고 합니다. 출력 결과가 3이 되도록 코드를 작성하세요.
▶ 정답 확인하기
정답 1
(int)a / b 또는 (float)a / b 또는 a / (float)b
// 예시:
printf("결과: %.2f\n", (float)a / b);
정답 2
char ch = 'A';
printf("%d\n", (int)ch); // 출력: 65
정답 3
char ch = 'A';
printf("%d\n", (int)ch); // 출력: 65
정답 4
float result = (float)a / b;
정답 5
float num = 3.9;
printf("%d\n", (int)num); // 출력: 3