포스트

C++ & C# 타입 추론(Type Deduction)

C++ & C# 타입 추론(Type Deduction)

C++ & C# 타입 추론(Type Deduction) 정리

1. 타입 추론(Type Deduction)이란?

타입 추론이란 컴파일러가 변수나 표현식의 타입을 자동으로 결정하는 과정을 의미한다. C++과 C#에서는 각각 auto, decltype, var, dynamic 등을 사용하여 타입을 추론할 수 있다.


2. C++의 타입 추론

2.1 auto를 이용한 타입 추론

C++11부터 auto 키워드를 사용하면 컴파일러가 변수의 타입을 자동으로 결정할 수 있다.

🔹 기본 예제

1
2
int x = 10;
auto y = x;  // y의 타입은 int로 추론됨

🔹 auto를 이용한 함수 반환값

1
2
3
auto add(int a, int b) {
    return a + b;  // 반환값의 타입을 자동 추론 (int)
}

2.2 decltype을 이용한 타입 추론

decltype주어진 표현식(변수, 연산 결과 등)의 타입을 추론할 때 사용된다.

🔹 기본 예제

1
2
int x = 10;
decltype(x) y = 20;  // y의 타입은 int로 추론됨

🔹 연산 결과의 타입 추론

1
2
3
int a = 5;
double b = 2.5;
decltype(a + b) result;  // result의 타입은 double

2.3 템플릿에서의 타입 추론

C++의 템플릿을 사용할 때 컴파일러는 전달된 인자에 따라 템플릿의 타입을 자동으로 추론한다.

🔹 함수 템플릿에서 타입 추론

1
2
3
4
5
6
7
8
9
10
template <typename T>
void print(T value) {
    std::cout << value << std::endl;
}

int main() {
    print(10);    // T는 int로 추론됨
    print(3.14);  // T는 double로 추론됨
    print("Hello"); // T는 const char*로 추론됨
}

2.4 T&&에서의 타입 추론 (완벽한 전달)

1
2
3
4
5
6
7
8
9
10
template <typename T>
void func(T&& arg) {
    std::cout << typeid(arg).name() << std::endl;
}

int main() {
    int x = 10;
    func(x);   // T = int&, T&& = int&
    func(20);  // T = int,  T&& = int&&
}
입력 값T가 추론된 타입T&&로 변환된 타입
func(x);int&int&
func(20);intint&&

3. C#의 타입 추론

3.1 var를 이용한 타입 추론

C#에서는 var 키워드를 사용하면 변수의 타입을 자동으로 결정할 수 있다.

🔹 기본 예제

1
2
3
var x = 10;       // x의 타입은 int로 추론됨
var y = "hello";  // y의 타입은 string으로 추론됨
var z = 3.14;     // z의 타입은 double로 추론됨

3.2 dynamic을 이용한 런타임 타입 결정

dynamic 키워드는 런타임에 타입이 결정되는 변수를 만들 때 사용된다.

1
2
3
4
5
dynamic value = 10;
Console.WriteLine(value.GetType()); // 출력: System.Int32

value = "hello";  
Console.WriteLine(value.GetType()); // 출력: System.String

3.3 typeof를 이용한 타입 정보 가져오기

C#에서는 typeof를 사용하여 특정 타입 정보를 가져올 수 있다.

1
2
Console.WriteLine(typeof(int));       // 출력: System.Int32
Console.WriteLine(typeof(string));    // 출력: System.String

3.4 default를 이용한 기본값 타입 추론

C#에서는 default 키워드를 사용하면 특정 타입의 기본값을 반환할 수 있다.

1
2
3
int a = default;      // a는 0
bool b = default;     // b는 false
string s = default;   // s는 null

4. var vs dynamic vs object 비교

키워드타입 결정 시점타입 변경 가능 여부성능
var컴파일 타임❌ 불가능✅ 빠름
dynamic런타임✅ 가능❌ 느림
object컴파일 타임✅ 가능 (형변환 필요)중간
1
2
3
var v = "hello";       // 컴파일 타임에 string으로 결정됨
dynamic d = "hello";   // 런타임에 string으로 결정됨
object o = "hello";    // object 타입이지만, 형변환 필요

5. C++의 auto vs C#의 var

기능C++ autoC# var
타입 추론 시점컴파일 타임컴파일 타임
형변환 가능 여부❌ 불가능❌ 불가능
사용 제한템플릿과 함께 사용 가능초기화 필수
함수 반환 타입✅ 가능❌ 불가능
1
auto x = 10;  // C++에서 auto 사용
1
var x = 10;   // C#에서 var 사용
  • 둘 다 컴파일 타임에 타입이 결정됨.
  • C++의 auto템플릿과 함께 사용 가능, C#의 var함수 반환 타입으로 사용할 수 없음.

6. 결론

C++의 auto vs C#의 var컴파일 타임 타입 추론, 반드시 초기화 필요
decltype (C++)변수나 표현식의 타입을 추론
dynamic (C#)런타임 타입 결정, 하지만 성능 저하 가능성 있음
typeof (C#)타입 정보를 가져올 때 사용
default (C#)타입의 기본값을 반환

🚀 C++의 auto와 C#의 var는 비슷하지만, dynamic은 C++에 없는 기능!

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.