본문으로 건너뛰기
모던 C++LESSON 03

auto: 타입 추론을 편하게 쓰는 법과 남용 기준

난이도초급 → 중급 입문
예상 시간45분
선수지식이전 강의

3강. auto: 타입 추론을 편하게 쓰는 법과 남용 기준

이번 강의에서 해결할 문제​

반복자처럼 타입 이름이 긴 값을 매번 직접 적으면 핵심 로직이 가려집니다. 반대로 모든 변수를 auto로 선언하면 숫자의 정밀도나 복사 여부를 읽기 어려워질 수 있습니다.

학습 목표​

  • auto가 초기값으로 컴파일 시점 타입을 추론함을 설명합니다.
  • 타입이 명백하거나 긴 경우와 단위·정밀도가 중요한 경우를 구분합니다.
  • auto, const auto, auto&의 차이를 관찰합니다.

먼저 알아야 할 핵심 개념​

auto는 JavaScript 같은 동적 타입이 아닙니다. 컴파일러가 선언문의 초기값을 보고 하나의 정적 타입을 정하며 이후 다른 타입으로 바뀌지 않습니다. 기본 auto는 값으로 받기 때문에 참조와 최상위 const가 제거될 수 있습니다. 원본을 읽기만 하려면 const auto&, 수정하려면 의도적으로 auto&를 사용합니다.

가장 작은 실행 가능한 예제​

auto_scores.cpp
#include <iostream>
#include <vector>

int main() {
const std::vector<int> scores{80, 90, 100};
auto total = 0;

for (const auto score : scores) {
total += score;
}

const auto average = static_cast<double>(total) / scores.size();
std::cout << total << ' ' << average << '\n';
}

핵심 코드 줄별 설명​

  1. auto total = 0은 초기값 0 때문에 int가 됩니다.
  2. 각 점수는 작은 정수이므로 값 복사인 const auto score로 충분합니다.
  3. 정수 나눗셈을 피하려고 합계를 double로 명시 변환합니다.
  4. average는 나눗셈 결과로 double이 됩니다.
  5. auto를 사용해도 total에 문자열을 대입할 수는 없습니다.

실행 결과와 값 변화​

270 90

첫 초기값을 0.0으로 바꾸면 total도 double이 됩니다. 작은 초기값 차이가 이후 계산 타입을 바꾸므로 숫자 단위와 정밀도가 중요한 변수는 명시적 타입이 더 읽기 좋습니다.

단계별 실습​

실습 목표​

아이템 무게의 합과 평균에서 추론된 타입을 확인합니다.

시작 전 상태와 실행 방법​

std::vector<double> weights{1.5, 2.0, 3.5}를 준비하고 C++17로 빌드합니다.

1단계: 최소 코드 작성​

auto total = 0.0과 범위 기반 for로 합계를 계산합니다.

2단계: 값 또는 조건을 바꿔 결과 비교​

초기값을 0으로 바꾸고 total += weight 결과가 어떤 변환을 거치는지 경고 수준을 높여 확인합니다.

3단계: 작은 기능 확장​

가장 무거운 값의 반복자를 auto로 받아 출력합니다.

4단계: 스스로 해결하기​

큰 std::string 목록을 auto, auto&, const auto&로 순회할 때 수정 가능성과 복사 비용을 비교하세요.

막혔을 때​

auto 변수에는 반드시 초기값이 필요합니다. auto value;처럼 타입을 결정할 근거가 없으면 컴파일할 수 없습니다.

흔한 실수와 해결 방법​

  • 리터럴 타입을 놓침: 0, 0.0, 0.0f는 각각 다른 타입입니다.
  • 큰 객체를 값으로 순회: 복사가 필요 없으면 const auto&를 사용합니다.
  • API 경계를 모두 auto로 숨김: 함수 반환형이나 단위가 중요한 값은 명시적 타입이 계약을 더 잘 보여 줍니다.

게임 개발 연결​

컴포넌트나 컨테이너 반복자처럼 타입이 긴 지역 변수에는 auto가 유용합니다. 체력, 시간, 네트워크 ID처럼 단위와 비트 폭이 중요한 값은 float, double, 고정 폭 정수 등 프로젝트 타입을 명시하는 편이 안전합니다.

이해 점검 질문 3개​

  1. auto가 동적 타입이 아닌 이유는 무엇인가요?
  2. auto와 const auto&로 컨테이너 원소를 받을 때 무엇이 달라지나요?
  3. 숫자 계산에서 명시적 타입이 더 나은 사례는 무엇인가요?

핵심 요약​

auto는 타입을 없애지 않고 컴파일러가 초기값으로 결정하게 합니다. 타입이 문맥에서 분명하고 반복을 줄일 때 사용하며, 단위·정밀도·소유 의미를 숨기면 명시적으로 적습니다.

다음 강의 연결​

4강. nullptr에서 정수 0과 빈 포인터를 타입 수준에서 구분해 오버로드 선택 오류를 줄입니다.

MINI QUIZ

auto: 타입 추론을 편하게 쓰는 법과 남용 기준 미니 퀴즈

선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.

0 / 2
  1. 문제 1“auto: 타입 추론을 편하게 쓰는 법과 남용 기준” 실습 결과를 해석하는 올바른 기준은 무엇인가요?
  2. 문제 2‘큰 객체를 값으로 순회’ 실수를 판단할 때 “auto: 타입 추론을 편하게 쓰는 법과 남용 기준” 강의가 제시한 기준은 무엇인가요?
LESSON STATUS

학습을 마쳤나요?

직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.

3강. auto: 타입 추론을 편하게 쓰는 법과 남용 기준 미완료 상태