반응형
operator[] 배열 인덱스 연산자
[] 연산자는 배열 인덱스 연산자(Array index operator) 또는 서브스크립트 연산자(Subscript operator)라고 부른다.
C언어 시절 배열의 특정 원소에 index로 접근하는 용도로 사용되었는데 그때 용도가 굳어져서 이름이 되어버린 연산자이다.
수학에서 수열의 원소를 a1, a2, a3처럼 아래 첨자로 표시하는 것을 서브스크립트라고 하는데. 프로그래밍에서도 배열의 원소를 지정하는 방식이 이와 유사하기 때문에 '서브스크립트 연산자'라고도 불린다.
이제 배열 인덱스 연산자의 주요 쓰임새에 대해서 알아보자.
배열 및 컨테이너 원소 접근 (Accessing Elements)
가장 기본적으로 기능으로, 배열이나 std::vector, std::map 같은 컨테이너에서 특정 위치의 데이터에 접근할 때 사용한다.
int arr[3] = {10, 20, 30};
int value = arr[1]; // 20에 접근
std::map<string, int> scores;
scores["Kim"] = 90; // "Kim"이라는 키에 90을 저장[] 연산자 오버로딩 ([] Operator Overloading)
사용자 정의 클래스에서 []를 마치 배열처럼 사용할 수 있도록 정의할 수 있다. 예를 들어, 나만의 리스트 클래스를 정의한 후 내부 데이터를 직관적으로 꺼내 쓰고 싶다면 배열 인덱스 연산자를 오버로딩해서 사용하면 된다.
class MyList
{
int data[10];
public:
// [] 연산자 오버로딩
int& operator[](int index)
{
return data[index];
}
};람다식의 캡처 리스트
C++11부터 도입된 람다 함수(Lambda Expression)에서 []는 함수 외부의 변수를 함수 내부로 캡처하는 역할을 한다.
- [] : 외부 변수를 사용하지 않음
- [=] : 외부의 모든 변수를 값으로 복사해서 사용
- [&] : 외부의 모든 변수를 참조로 사용
int factor = 2;
auto multiply = [factor](int n) { return n * factor; };
// [factor]를 통해 외부 변수 factor에 접근
auto result = multiply(5);
// result의 값은 10정리하자면
- 본래 배열의 인덱스로 접근하는 용도로 탄생한 연산자
- 현재는 배열 및 컨테이너 원소 접근, [] 연산자 오버로딩, 람다식의 캡처 리스트 등 여러 가지로 사용됨
- 배열을 생각하면 이름 외우기가 쉬움
함께 읽으면 좋은 글
C++ operator<< 삽입 연산자 톺아보기
operator클래스를 선언하고 구현할 때 가장 익숙하지 않은 연산자라고 한다면 개인적으로 삽입 연산자를 꼽고 싶다. 보통은 직접 구현하지 않고 다른 사람이 작성한 클래스에서 발견되고는 하는
jettstream.tistory.com
'프로그래밍 > C++' 카테고리의 다른 글
| C++ Static 함수와 Static 변수에 대해서 (1) | 2026.04.18 |
|---|---|
| C++ *와 & 연산자 톺아보기 (0) | 2026.03.29 |
| C++ 역참조 연산자와 화살표 연산자에 대해 (0) | 2026.03.29 |
| C++ operator<< 삽입 연산자 톺아보기 (0) | 2026.03.14 |
| 생산자 - 소비자 패턴으로 스레드 공부하기 (0) | 2026.02.21 |
댓글