Home C++의 auto란 무엇일까?
Post
Cancel

C++의 auto란 무엇일까?

C를 쓰다가 C++을 배우게 되면 C에서 쓰지 않은 생소한 것들이 있을 것이다 이번 글에선 그 중 auto 키워드에 대해 알아보려고 한다

auto 키워드란?

auto 키워드는 C++11부터 도입된 키워드로 이전에 C 언어에서 사용되었던 거의 의미 없는 키워드였던 auto가 C++에서는 타입 추론 도구로 재탄생하였다

자동 타입 추론(Automatic Type Deduction)

auto를 사용하면 변수의 타입을 컴파일러가 자동으로 결정하도록 할 수 있다고 하였는데 이 기능은 특히 복잡한 타입 이름을 다룰 때 빛을 발한다

예를 들어 STL 컨테이너의 반복자나 복잡한 템플릿 타입을 다룰 때 auto를 사용하면 코드의 가독성을 개선하며 빠르게 작업할 수 있다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <vector>
#include <map>

int main() {
    std::vector<double> vec = {1.1, 2.2, 3.3};
    
    // 기본
    for (std::vector<double>::iterator it = vec.begin(); it != vec.end(); ++it) {
        std::cout << *it << " ";
    }
    std::cout << std::endl;

    // auto 사용
    for (auto it = vec.begin(); it != vec.end(); ++it) {
        std::cout << *it << " ";
    }

    return 0;
}

위 코드에서 볼 수 있듯이 auto를 사용함으로써 코드가 더 간결해지고 이해하기 쉬워지는 걸 볼 수 있다

후행 반환 타입(Trailing Return Type)

auto를 사용해 함수의 반환 타입을 지정할 수 있는데 이 경우 실제 타입은 ->를 사용하여 함수 선언 끝에 명시해야 한다

이 방식은 주로 템플릿 함수에서 사용되며 반환 타입이 입력 타입에 의존할 때 특히 유용하다

1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>

template <typename T, typename U>
auto add(T x, U y) -> decltype(x + y) {
    return x + y;
}

int main() {
    auto result = add(5, 4.3);  // int와 double의 합
    std::cout << "결과: " << result << std::endl;  // double 타입
    return 0;
}

위 코드는 add 함수가 서로 다른 타입의 두 매개변수를 받아 그 결과 타입을 컴파일러가 자동으로 추론하도록 하는 코드로 이렇게 함수에서도 auto 키워드를 유용하게 사용할 수 있다

결론

auto 키워드의 도입을 통해 코드의 간결함과 유지보수의 용이성, 복잡한 타입을 더 쉽게 다룰 수 있게 편의성이 증진되었지만

auto 사용이 항상 적절한 것은 아니며 명확성이 필요한 경우 같이, 기존의 타입 명시 방식을 사용하는게 필요한 상황에서는 auto를 고집하지 말고 기존의 타입 명시 방법을 사용해야 한다

마지막으로 C를 배우다가 C++ 코드를 처음 보니 auto 키워들 많이들 쓰기에 뭔가 싶었는데 배우고 나니 느낀게 auto 키워드는 신의 한수인 거 같다

This post is licensed under CC BY 4.0 by the author.

12월 6일 Today I Learned

12월 7일 Today I Learned