산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> C 언어

C++ 타입 변환 이해하기: 암시적, 명시적, 캐스팅 기법

C++ 타입 변환

C++이 데이터 타입 변경을 어떻게 처리하는지, 자동 변환부터 안전한 캐스팅 기법까지 실전 코드 예제로 알아봅니다.

C++에서는 한 타입의 값을 다른 타입으로 변환할 수 있습니다. 이 과정을 타입 변환(Type Conversion)이라 합니다. 변환 규칙을 이해하면 더 명확하고 안전한 코드를 작성할 수 있습니다.

주요 두 가지 범주:

  1. 암시적(자동) 변환
  2. 명시적 변환(타입 캐스팅)

암시적 타입 변환

컴파일러가 호환되는 타입으로 값을 자동 승격/강등시키는 변환입니다. 소스 코드에 캐스팅이 보이지 않으며 내부적으로 일어납니다.

예제 1: int → double

#include <iostream>
using namespace std;
int main() {
    int num_int = 9;
    double num_double = num_int; // 암시적 변환
    cout << "num_int = " << num_int << endl;
    cout << "num_double = " << num_double << endl;
    return 0;
}

실행 결과

num_int = 9
num_double = 9

컴파일러가 대입 전 int를 double로 자동 확대했습니다.

예제 2: double → int (잘림 발생)

#include <iostream>
using namespace std;
int main() {
    double num_double = 9.99;
    int num_int = num_double; // 암시적 변환
    cout << "num_int = " << num_int << endl;
    cout << "num_double = " << num_double << endl;
    return 0;
}

실행 결과

num_int = 9
num_double = 9.99

int는 소수부가 없으므로 소수 부분이 버려집니다. 이는 축소 변환(Narrowing Conversion)의 예입니다.

팁: 더 넓은 타입에서 좁은 타입으로 변환 시 정밀도 손실이 발생할 수 있습니다. 손실이 중요하면 명시적으로 처리하세요.

축소 변환과 데이터 손실

더 큰 타입을 더 작은 타입에 대입하면 컴파일러가 데이터를 잘라낼 수 있습니다. 범위 불일치를 시각화하면 예기치 않은 버그를 예방할 수 있습니다.

C++ 타입 변환 이해하기: 암시적, 명시적, 캐스팅 기법

명시적 변환(타입 캐스팅)

변환을 직접 제어해야 할 때 명시적 캐스팅을 사용합니다. C++은 같은 목적을 위한 여러 문법을 제공하며 각각 스타일 가이드가 다릅니다.

  1. C 스타일 캐스팅
  2. 함수 스타일 캐스팅(구형 C++ 스타일)
  3. 현대 C++ 캐스트: static_cast, dynamic_cast, const_cast, reinterpret_cast

C 스타일 타입 캐스팅

C에서 물려받은 전통적 형태:

(data_type)expression;

예제:

#include <iostream>
using namespace std;
int main() {
    int num_int = 26;
    double num_double = (double)num_int; // C 스타일 캐스팅
    cout << "num_double = " << num_double << endl;
    return 0;
}

함수 스타일 캐스팅

생성자 호출처럼 읽히는 더 명시적인 대안:

data_type(expression);

예제:

#include <iostream>
using namespace std;
int main() {
    int num_int = 26;
    double num_double = double(num_int); // 함수 스타일 캐스팅
    cout << "num_double = " << num_double << endl;
    return 0;
}

C 스타일과 함수 스타일 캐스팅 비교

#include <iostream>
using namespace std;
int main() {
    double num_double = 3.56;
    cout << "num_double = " << num_double << endl;
    int num_int1 = (int)num_double; // C 스타일
    int num_int2 = int(num_double); // 함수 스타일
    cout << "num_int1 = " << num_int1 << endl;
    cout << "num_int2 = " << num_int2 << endl;
    return 0;
}

실행 결과

num_double = 3.56
num_int1 = 3
num_int2 = 3

두 캐스팅 결과는 동일하지만, 함수 스타일이 현대 C++에서 더 선명하고 실수하기 어려워 권장됩니다.

현대 C++ 캐스트 연산자

클래식 형태 외에 타입 안전성과 의도를 더 명확히 하는 4가지 전용 캐스트 연산자가 있습니다:

각 연산자는 별도 튜토리얼에서 심층 다룹니다.


추천 튜토리얼:

C 언어

  1. C# 타입 변환 마스터하기: 암시적, 명시적, Parse, Convert 메서드
  2. C++ 데이터 타입 이해하기: 기초, 수정자, 모범 사례
  3. C++ 연산자 마스터하기: 유형별 완벽 가이드와 실전 예제
  4. C++ 주석: 가독성 높고 유지보수하기 좋은 코드 작성법
  5. C++ 클래스 템플릿 마스터: 실전 가이드
  6. 파이썬 타입 변환 & 캐스팅 마스터하기: 종합 가이드
  7. Python 숫자, 형 변환, 수학 마스터하기
  8. C++ char 타입 마스터: 선언, ASCII 코드, 문자열 변환 기법
  9. C++ 프로그래밍 언어: 개요와 핵심 특징
  10. C++ 변수 타입 완벽 이해: 메모리, 범위, 연산