auto: 타입 추론을 편하게 쓰는 법과 남용 기준
3강. auto: 타입 추론을 편하게 쓰는 법과 남용 기준
이번 강의에서 해결할 문제
반복자처럼 타입 이름이 긴 값을 매번 직접 적으면 핵심 로직이 가려집니다. 반대로 모든 변수를 auto로 선언하면 숫자의 정밀도나 복사 여부를 읽기 어려워질 수 있습니다.
학습 목표
auto가 초기값으로 컴파일 시점 타입을 추론함을 설명합니다.- 타입이 명백하거나 긴 경우와 단위·정밀도가 중요한 경우를 구분합니다.
auto,const auto,auto&의 차이를 관찰합니다.
먼저 알아야 할 핵심 개념
auto는 JavaScript 같은 동적 타입이 아닙니다. 컴파일러가 선언문의 초기값을 보고 하나의 정적 타입을 정하며 이후 다른 타입으로 바뀌지 않습니다. 기본 auto는 값으로 받기 때문에 참조와 최상위 const가 제거될 수 있습니다. 원본을 읽기만 하려면 const auto&, 수정하려면 의도적으로 auto&를 사용합니다.
가장 작은 실행 가능한 예제
#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';
}
핵심 코드 줄별 설명
auto total = 0은 초기값0때문에int가 됩니다.- 각 점수는 작은 정수이므로 값 복사인
const auto score로 충분합니다. - 정수 나눗셈을 피하려고 합계를
double로 명시 변환합니다. average는 나눗셈 결과로double이 됩니다.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개
auto가 동적 타입이 아닌 이유는 무엇인가요?auto와const auto&로 컨테이너 원소를 받을 때 무엇이 달라지나요?- 숫자 계산에서 명시적 타입이 더 나은 사례는 무엇인가요?
핵심 요약
auto는 타입을 없애지 않고 컴파일러가 초기값으로 결정하게 합니다. 타입이 문맥에서 분명하고 반복을 줄일 때 사용하며, 단위·정밀도·소유 의미를 숨기면 명시적으로 적습니다.
다음 강의 연결
4강. nullptr에서 정수 0과 빈 포인터를 타입 수준에서 구분해 오버로드 선택 오류를 줄입니다.
auto: 타입 추론을 편하게 쓰는 법과 남용 기준 미니 퀴즈
선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.
학습을 마쳤나요?
직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.