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

범위 기반 for: 컨테이너를 읽기 쉽게 순회하기

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

8강. 범위 기반 for: 컨테이너를 읽기 쉽게 순회하기

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

목록의 모든 값을 읽는 데도 인덱스 초기화·범위 조건·증가식을 직접 쓰면 범위를 벗어나는 실수가 생기고 실제 관심사인 원소 처리가 가려집니다. 원소를 값으로 복사할지 참조로 다룰지도 분명해야 합니다.

학습 목표​

  • 인덱스가 필요한 반복과 원소 순회의 차이를 구분합니다.
  • 값, auto&, const auto& 순회를 선택합니다.
  • 원본 수정 여부를 실행 결과로 확인합니다.

먼저 알아야 할 핵심 개념​

범위 기반 for는 for (선언 : 범위) 형태로 컨테이너의 각 원소를 방문합니다. 값으로 받으면 복사본, 참조로 받으면 원본을 다룹니다. 큰 객체를 읽기만 할 때는 const auto&, 원본 수정이 필요할 때는 auto&가 일반적인 선택입니다.

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

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

int main() {
std::vector<int> itemCounts{1, 2, 3};

for (auto& count : itemCounts) {
count += 1;
}

for (const auto count : itemCounts) {
std::cout << count << ' ';
}
std::cout << '\n';
}

핵심 코드 줄별 설명​

  1. 첫 반복의 auto&는 각 원본 정수의 별칭입니다.
  2. count += 1이 vector 안의 값 자체를 바꿉니다.
  3. 두 번째 반복은 작은 정수를 값으로 읽습니다.
  4. 출력 반복은 원본을 수정하지 않습니다.
  5. 현재 위치 번호가 필요하지 않아 인덱스를 만들지 않았습니다.

실행 결과와 값 변화​

2 3 4

첫 반복에서 auto&를 auto로 바꾸면 복사본만 증가해 출력은 원래 값 1 2 3이 됩니다. & 하나가 원본 수정 여부를 바꿉니다.

단계별 실습​

실습 목표​

플레이어 이름 목록을 읽고 경험치 목록을 수정합니다.

시작 전 상태와 실행 방법​

vector<string> names와 vector<int> experience를 준비합니다.

1단계: 최소 코드 작성​

이름을 const auto&로 순회해 출력합니다.

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

경험치를 값으로 순회해 10을 더한 뒤 원본이 바뀌지 않는지 확인합니다.

3단계: 작은 기능 확장​

경험치를 auto&로 순회해 실제 원본에 10을 더합니다.

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

이름과 경험치를 같은 위치끼리 함께 출력해야 한다면 범위 기반 반복만으로 충분한지 판단하고 인덱스 반복을 선택하세요.

막혔을 때​

문자열 타입 오류가 나면 <string>과 <vector>를 포함했는지 확인합니다. const auto& 원소를 수정하려 하면 컴파일 오류가 나는 것이 정상입니다.

흔한 실수와 해결 방법​

  • 수정하려는데 값으로 순회: 원본을 바꿔야 할 때만 auto&를 사용합니다.
  • 큰 객체를 매번 복사: 읽기 전용이면 const auto&로 비용을 줄입니다.
  • 위치가 필요한데 억지로 범위 for 사용: 인덱스 의미가 요구사항이면 명시적 인덱스가 더 명확합니다.

게임 개발 연결​

인벤토리 아이템, 적 목록, 점수 목록을 순회할 때 자주 사용합니다. 순회 중 컨테이너에 원소를 추가·삭제하면 반복자가 무효화될 수 있으므로 구조 변경은 별도 단계로 분리하고 심화 과정에서 규칙을 자세히 다룹니다.

이해 점검 질문 3개​

  1. 값 순회와 참조 순회의 원본 상태 차이는 무엇인가요?
  2. 큰 객체를 읽기만 할 때 const auto&가 적합한 이유는 무엇인가요?
  3. 범위 기반 for보다 인덱스 반복이 더 나은 상황은 언제인가요?

핵심 요약​

범위 기반 for는 모든 원소를 방문한다는 목적을 간단히 표현합니다. 복사·읽기·수정 중 무엇이 필요한지 결정한 뒤 값, const 참조, 수정 참조를 선택합니다.

다음 강의 연결​

9강. 구조적 바인딩에서 하나의 원소 안에 묶인 이름과 값을 읽기 좋은 지역 이름으로 분해합니다.

MINI QUIZ

범위 기반 for: 컨테이너를 읽기 쉽게 순회하기 미니 퀴즈

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

0 / 2
  1. 문제 1“범위 기반 for: 컨테이너를 읽기 쉽게 순회하기”에서 다음 단계로 넘어가기 전에 확인할 핵심은 무엇인가요?
  2. 문제 2‘수정하려는데 값으로 순회’ 상태에 관한 “범위 기반 for: 컨테이너를 읽기 쉽게 순회하기” 본문의 설명으로 가장 알맞은 것은 무엇인가요?
LESSON STATUS

학습을 마쳤나요?

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

8강. 범위 기반 for: 컨테이너를 읽기 쉽게 순회하기 미완료 상태