C++ 초급 - 2. 기본 문법 (2 - auto 타입 추론 (C++11))
2025. 2. 12. 11:41ㆍ프로그래밍 언어/C++
2.2 auto 타입 추론 (C++11)
C++11부터 auto 키워드를 사용하면 변수의 데이터 타입을 명시적으로 지정하지 않고도, 컴파일러가 자동으로 타입을 추론할 수 있다.
이는 코드의 가독성을 높이고, 유지보수를 쉽게 하며, 반복적인 타입 선언을 줄이는 데 유용하다.
📌 auto 키워드의 기본 사용법
컴파일러는 우변(할당된 값)의 데이터 타입을 기반으로 auto의 타입을 결정한다.
#include <iostream>
int main() {
auto num = 42; // int
auto pi = 3.14; // double
auto isValid = true; // bool
std::cout << "num: " << num << " (int)" << std::endl;
std::cout << "pi: " << pi << " (double)" << std::endl;
std::cout << "isValid: " << isValid << " (bool)" << std::endl;
return 0;
}
🔹 출력 결과
num: 42 (int)
pi: 3.14 (double)
isValid: 1 (bool)
💡 컴파일러가 자동으로 타입을 결정하는 과정
- 42 → 정수이므로 int
- 3.14 → 부동소수점이므로 double
- true → 논리형이므로 bool
📌 auto 키워드를 사용할 때의 장점
1. 가독성 향상
auto를 사용하면 복잡한 데이터 타입을 직접 명시하지 않아도 되므로, 코드가 더 깔끔하고 읽기 쉬워진다.
std::vector<int>::iterator it = myVector.begin(); // 기존 방식
auto it = myVector.begin(); // auto 사용
2. 유지보수 용이
코드 변경 시 타입을 다시 수정할 필요 없이, 컴파일러가 알아서 타입을 맞춰준다.
auto myValue = getSomeValue(); // 반환 타입이 바뀌어도 코드 수정 불필요
3. 반복적인 타입 선언 제거
템플릿을 사용할 때 타입이 길어지는 경우가 많은데, auto를 활용하면 코드가 훨씬 간결해진다.
std::map<std::string, std::vector<int>> myMap;
auto it = myMap.begin(); // 타입을 직접 쓰지 않아도 됨
📌 auto의 다양한 활용 예제
1. 반복문에서 활용
auto를 사용하면 컨테이너의 요소 타입을 명시할 필요 없이, 쉽게 반복문을 작성할 수 있다.
(1) auto와 for 반복문
#include <iostream>
#include <vector>
int main() {
std::vector<int> numbers = {1, 2, 3, 4, 5};
// auto를 사용하여 요소 타입을 자동 추론
for (auto num : numbers) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
🔹 출력 결과
1 2 3 4 5
(2) auto와 for 반복문 (참조 사용)
for (auto& num : numbers) {
num *= 2; // 벡터 요소의 값을 직접 변경
}
2. 함수 반환값 저장
C++11부터 auto는 함수의 반환값을 저장하는 변수에도 사용할 수 있다.
#include <iostream>
int getNumber() {
return 100;
}
int main() {
auto value = getNumber(); // 반환값(int) 타입을 자동 추론
std::cout << "value: " << value << std::endl;
return 0;
}
📌 auto 사용 시 주의할 점
1. auto는 선언과 동시에 초기화해야 함
auto x; // 오류: 초기화되지 않으면 타입을 추론할 수 없음
- auto는 반드시 초기화와 함께 사용해야 한다.
2. auto는 상수(const)와 함께 사용할 때 주의
const int num = 10;
auto x = num; // int (const 속성 제거됨)
const auto y = num; // const 유지됨
- auto는 기본적으로 const 속성을 제거하므로, 필요한 경우 const auto로 선언해야 한다.
3. auto는 배열의 타입을 추론할 수 없음
int arr[] = {1, 2, 3};
auto x = arr; // x는 int* (포인터)로 해석됨, 배열이 아님
- auto를 사용하면 배열이 아니라 포인터로 해석된다.
📌 C++14 이후 auto 관련 확장
1. auto를 반환 타입으로 사용 가능 (C++14)
auto add(int a, int b) {
return a + b; // 반환 타입 자동 추론 (int)
}
2. decltype(auto) (C++14)
- decltype(auto)를 사용하면 auto가 제거하는 const 속성을 유지할 수 있다.
const int num = 10;
decltype(auto) x = num; // const 유지됨
정리
특징 | 설명 |
auto 사용 | 컴파일러가 변수의 타입을 자동으로 추론 |
장점 | 코드 가독성 향상, 유지보수 용이, 반복적인 타입 선언 제거 |
활용 | 반복문, 함수 반환값 저장, 복잡한 컨테이너 타입 |
주의점 | 초기화 필수, const 속성 제거 가능, 배열 선언 시 포인터로 변환됨 |
C++14 확장 | 함수 반환 타입 auto, decltype(auto) 추가 |
'프로그래밍 언어 > C++' 카테고리의 다른 글
C++ 초급 - 2. 기본 문법 (4 - 주석 (Comments)) (0) | 2025.02.12 |
---|---|
C++ 초급 - 2. 기본 문법 (3 - 기본 입출력 (Standard Input & Output)) (0) | 2025.02.12 |
C++ 초급 - 2. 기본 문법 (1 - 변수와 데이터 타입 (Variables & Data Types)) (0) | 2025.02.12 |
C++ 초급 - 1. C++ 소개 및 개발 환경 설정 (4 - 첫 번째 C++ 프로그램 실행) (0) | 2025.02.12 |
C++ 초급 - 1. C++ 소개 및 개발 환경 설정 (3 - 개발 환경 설정) (0) | 2025.02.12 |