티스토리 뷰
※ 주의 사항 ※
- 이 글의 목적은 '지식의 전달'이 아닌 '학습의 기록'입니다.
- 따라서 제가 이해하는 그대로의 내용이 포함됩니다.
- 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다.
C++에서 사용하는 for문은 C언어로부터 물려받은 반복문입니다. 사용 예는 다음과 같습니다.
#include <iostream>
int main()
{
for(int i = 0; i < 10; i++)
{
std::cout << i << ' ';
}
std::cout << std::endl;
return 0;
}
/*
실행 결과
0 1 2 3 4 5 6 7 8 9
*/
만약 다음과 같은 배열이 있다고 가정했을 때,
int arr[] = { 11, 1010, 22, 99, 33, 88, 44, 77, 55, 66 };
for문을 이용해 위 배열의 각 요소들을 순서대로 출력하려면 다음과 같이 할 수 있습니다.
#include <iostream>
int main()
{
int arr[] = { 11, 1010, 22, 99, 33, 88, 44, 77, 55, 66 };
for (int i = 0; i < 10; i++)
{
std::cout << arr[i] << ' ';
}
std::cout << std::endl;
return 0;
}
/*
실행 결과
11 1010 22 99 33 88 44 77 55 66
*/
인덱스 i를 이용해서 배열의 각 요소에 직접 접근하는 모습입니다. 하지만 '범위 기반 for문'을 이용하면 다음과 같이 할 수 있습니다.
#include <iostream>
int main()
{
int arr[] = { 11, 1010, 22, 99, 33, 88, 44, 77, 55, 66 };
for (int number : arr) //범위 기반 for문의 차별점
{
std::cout << number << ' ';
}
std::cout << std::endl;
return 0;
}
/*
실행 결과
11 1010 22 99 33 88 44 77 55 66
*/
범위 기반 for문은 특별할 것 없습니다. arr이라는 그룹 내의 모든 멤버들을 한 번에 하나씩 변수 number에 저장하고, 이 number를 가지고 원하는 작업을 수행하도록 합니다. 위 예제에서 일어나는 일을 설명하면 다음과 같습니다. 처음 for문을 실행할 때는 arr의 첫 번째 요소인 '11'이 number에 저장되고 이를 출력합니다. 그 다음엔 arr의 두 번째 요소인 '1010'을 number에 저장하고 이를 출력합니다. arr의 마지막 요소를 number에 저장하고 출력할 때까지 이를 반복합니다.
이런 문법은 자바나 C#같은 객체 지향 언어들은 모두 하나씩 가지고 있습니다. 자바의 foreach문이 그러합니다. 그래서 객체 지향 언어를 조금 맛본 사람은 C++의 범위 기반 for문을 낯설어하지 않을 것 같습니다.
저는 위 예제를 보면서 배열 arr에 있는 모든 요소들을 하나씩 number에 저장할 때마다 값의 복사가 일어날 것이라고 생각했습니다. 만약 객체로 이루어진 배열을 다루게 될 경우 혹은 객체들을 저장하는 컨테이너를 다루게 될 경우, 범위 기반 for문이 끝나기까지 계속 이런 복사가 이뤄진다면 프로그램의 성능에 안 좋은 영향을 끼칠 수 있을 것이라고 생각했습니다. 그래서 arr의 요소들을 참조자로 받으면 어떨까 생각했고 다음과 같이 코드를 수정해서 실행해 보았습니다.
#include <iostream>
int main()
{
int arr[] = { 11, 1010, 22, 99, 33, 88, 44, 77, 55, 66 };
for (int& number : arr) //참조자 사용
{
std::cout << number << ' ';
}
std::cout << std::endl;
return 0;
}
/*
실행 결과
11 1010 22 99 33 88 44 77 55 66
*/
프로그램의 실행에는 아무런 문제가 없었습니다. 따라서 저는 앞으로 범위 기반 for문을 사용할 때는 참조자를 사용하는 습관을 들일 생각입니다.
'공부 일지 > CPP 공부 일지' 카테고리의 다른 글
C++17 Date and time utilities (0) | 2022.02.07 |
---|---|
C++ | mutable 키워드 (0) | 2021.08.10 |
C++ | 상수 표현식(constexpr ) (0) | 2021.08.07 |
C++ | 열거형 (0) | 2021.08.06 |
C++ | 묶음 타입(구조체와 공용체) (0) | 2021.08.06 |