Skip to Content
💻 코리아IT아카데미 신촌 - 프로그래밍 학습 자료

Topic 4: 자료형 변환 🔄

학습 목표

  • 자료형 변환의 개념과 필요성을 이해할 수 있다
  • 암시적 변환과 명시적 변환의 차이점을 구분할 수 있다
  • 적절한 형변환을 사용하여 정확한 결과를 얻을 수 있다

자료형 변환이 필요한 이유

프로그래밍에서는 서로 다른 자료형 간의 연산이나 대입이 자주 발생합니다. 이때 자료형을 변환해야 올바른 결과를 얻을 수 있습니다.

#include <iostream> using namespace std; int main() { // 문제 상황: 정수 나눗셈 int a = 7, b = 2; cout << "정수 나눗셈: " << a << " / " << b << " = " << (a / b) << endl; // 3 (소수점 버림) // 해결: 실수로 변환하여 나눗셈 cout << "실수 나눗셈: " << a << " / " << b << " = " << ((double)a / b) << endl; // 3.5 return 0; }

암시적 변환 (Implicit Conversion)

컴파일러가 자동으로 수행하는 형변환입니다.

승격 변환 (Promotion)

작은 자료형이 큰 자료형으로 자동 변환됩니다.

#include <iostream> using namespace std; int main() { // 정수 승격 char ch = 'A'; // ASCII: 65 short s = 100; int i = 200; long l = 300L; // char → int → long 순으로 승격 long result = ch + s + i + l; cout << "char + short + int + long = " << result << endl; // 실수 승격 float f = 3.14f; double d = 2.718; // float → double로 승격 double floatResult = f + d; cout << "float + double = " << floatResult << endl; return 0; }

자동 변환 규칙

#include <iostream> using namespace std; int main() { // 정수와 실수 연산 int intNum = 10; double doubleNum = 3.5; // int가 double로 변환됨 double result1 = intNum + doubleNum; cout << "int + double = " << result1 << endl; // 대입에서의 자동 변환 int i = 3.7; // double → int (소수점 버림) double d = 42; // int → double (42.0) cout << "int i = 3.7의 결과: " << i << endl; // 3 cout << "double d = 42의 결과: " << d << endl; // 42.0 // bool 변환 bool b1 = 42; // 0이 아니면 true bool b2 = 0; // 0이면 false cout << boolalpha; cout << "bool b1 = 42: " << b1 << endl; // true cout << "bool b2 = 0: " << b2 << endl; // false return 0; }

명시적 변환 (Explicit Conversion)

프로그래머가 직접 지정하는 형변환입니다.

C 스타일 캐스팅

#include <iostream> using namespace std; int main() { // 기본 형변환 double pi = 3.14159; int intPi = (int)pi; // double → int cout << "원주율을 int로: " << intPi << endl; // 3 // 정수 나눗셈을 실수 나눗셈으로 int a = 7, b = 3; double result = (double)a / b; // 하나만 변환해도 됨 cout << a << " / " << b << " = " << result << endl; // 문자와 숫자 변환 char letter = 'A'; int ascii = (int)letter; cout << "'" << letter << "'의 ASCII 코드: " << ascii << endl; char fromAscii = (char)65; cout << "ASCII 65의 문자: " << fromAscii << endl; return 0; }

형변환의 다양한 활용

#include <iostream> using namespace std; int main() { // 실수 계산을 위한 형변환 int totalPrice = 12345; int itemCount = 7; // 정확한 평균 가격 계산 double avgPrice = (double)totalPrice / itemCount; cout << "평균 가격: " << avgPrice << "원" << endl; // 비율 계산 int passed = 43, total = 50; double passRate = (double)passed / total * 100; cout << "합격률: " << passRate << "%" << endl; return 0; }

형변환 시 주의사항

데이터 손실 가능성

#include <iostream> using namespace std; int main() { // 큰 자료형 → 작은 자료형 (데이터 손실 위험) double largeNum = 3.14159265359; float smallNum = (float)largeNum; cout << "double: " << largeNum << endl; cout << "float: " << smallNum << endl; // 범위 초과 int bigInt = 300; char smallChar = (char)bigInt; // char 범위: -128~127 또는 0~255 cout << "int " << bigInt << " → char " << (int)smallChar << endl; // 음수 → 부호 없는 타입 int negative = -5; unsigned int positive = (unsigned int)negative; cout << "negative int: " << negative << endl; cout << "unsigned int: " << positive << endl; // 매우 큰 양수가 됨 return 0; }

올바른 형변환 사용법

#include <iostream> #include <iomanip> using namespace std; int main() { // 정확한 평균 계산 int kor = 88, eng = 92, math = 85; // 잘못된 방법 double wrongAvg = (kor + eng + math) / 3; // 정수 나눗셈 후 변환 // 올바른 방법 double correctAvg = (double)(kor + eng + math) / 3; // 실수 나눗셈 cout << fixed << setprecision(2); cout << "잘못된 평균: " << wrongAvg << endl; // 88.00 cout << "올바른 평균: " << correctAvg << endl; // 88.33 // 반올림 처리 double score = 87.6; int rounded = (int)(score + 0.5); // 반올림 cout << "점수 " << score << "의 반올림: " << rounded << endl; return 0; }

형변환 활용 예제

온도 변환 프로그램

#include <iostream> #include <iomanip> using namespace std; int main() { double celsius, fahrenheit, kelvin; cout << "섭씨 온도를 입력하세요: "; cin >> celsius; // 형변환을 통한 정확한 계산 fahrenheit = celsius * 9.0 / 5.0 + 32.0; kelvin = celsius + 273.15; cout << fixed << setprecision(2); cout << "섭씨: " << celsius << "°C" << endl; cout << "화씨: " << fahrenheit << "°F" << endl; cout << "켈빈: " << kelvin << "K" << endl; return 0; }

시간 계산 프로그램

#include <iostream> using namespace std; int main() { int totalSeconds; cout << "총 초 단위 시간을 입력하세요: "; cin >> totalSeconds; // 형변환을 통한 시간 단위 분할 int hours = totalSeconds / 3600; // 시간 int minutes = (totalSeconds % 3600) / 60; // 분 int seconds = totalSeconds % 60; // 초 cout << totalSeconds << "초는 "; cout << hours << "시간 " << minutes << "분 " << seconds << "초입니다." << endl; // 백분율 계산 예제 int correct = 18, total = 20; double percentage = (double)correct / total * 100; cout << "\n정답률: " << correct << "/" << total << " = "; cout << fixed << setprecision(1) << percentage << "%" << endl; return 0; }

실습 과제

기초 실습

  1. 두 정수를 입력받아 정확한 평균(소수점 2자리)을 계산하는 프로그램을 작성해보세요.
  2. ASCII 코드 값을 입력받아 해당하는 문자를 출력하고, 문자를 입력받아 ASCII 코드를 출력하는 프로그램을 작성해보세요.

심화 실습

  1. 세 과목의 점수를 입력받아 평균을 계산하고, 소수점 첫째 자리까지 출력하는 프로그램을 작성해보세요.
  2. 분 단위 시간을 입력받아 “시간과 분” 형태로 변환하여 출력하는 프로그램을 작성해보세요.

핵심 포인트

  • 암시적 변환: 컴파일러가 자동으로 수행 (작은 타입 → 큰 타입이 안전)
  • 명시적 변환: 프로그래머가 직접 지정 (위험할 수 있으므로 주의 필요)
  • C 스타일: (type)value - 간단하지만 위험할 수 있음
  • 형변환 활용: 정확한 계산을 위해 필수적
  • 주의사항: 큰 타입 → 작은 타입 변환 시 데이터 손실 가능
  • 활용: 정확한 나눗셈, 평균 계산, 단위 변환 등에 필수

이제 기본 자료형과 연산자를 마스터했으니, 다음 단원에서는 이들을 활용한 조건문을 배워보겠습니다.

✅ 자료형 변환 체크리스트

Last updated on