C#에서 인덱서(Indexer)는 클래스 인스턴스를 배열처럼 인덱싱 할 수 있도록 하는 기능입니다. 인덱서를 사용하면 클래스 인스턴스를 배열처럼 접근할 수 있으므로, 객체 내부의 데이터를 쉽게 관리할 수 있습니다.
인덱서는 클래스 내부에 this 키워드와 함께 정의됩니다. 인덱서를 사용하여 클래스 인스턴스를 인덱싱하면, 해당 인덱스에 대응하는 값을 반환하거나, 값을 할당할 수 있습니다. 다음은 간단한 예제입니다.
class MyArray
{
private int[] array = new int[5];
public int this[int i]
{
get
{
return array[i];
}
set
{
array[i] = value;
}
}
}
위 예제에서는 MyArray 클래스에 인덱서를 정의했습니다. 이 인덱서는 정수형 배열을 감싸는 기능을 합니다. MyArray 클래스를 사용하여 인덱서를 통해 배열에 접근할 수 있습니다.
MyArray myArray = new MyArray();
// 배열에 값 할당
myArray[0] = 10;
myArray[1] = 20;
myArray[2] = 30;
myArray[3] = 40;
myArray[4] = 50;
// 배열에서 값 가져오기
int val1 = myArray[0];
int val2 = myArray[3];
Console.WriteLine(val1); // 출력: 10
Console.WriteLine(val2); // 출력: 40
위 코드에서 MyArray 클래스의 인스턴스를 생성한 후, 인덱서를 사용하여 배열에 값을 할당하고, 값을 가져왔습니다. 이렇게 인덱서를 사용하여 배열처럼 클래스 인스턴스를 인덱싱할 수 있습니다.
참고로, 인덱서는 배열뿐만 아니라 컬렉션(Collection) 등의 객체에도 적용할 수 있습니다.
예를 들어, List<T> 클래스에서는 인덱서를 통해 리스트의 각 요소에 접근할 수 있습니다. List<T> 클래스는 일종의 동적 배열(dynamic array)로, 배열처럼 인덱싱할 수 있으며, 내부적으로는 배열을 이용하여 요소를 관리합니다.
다음은 List<T> 클래스에서 인덱서를 사용하는 예제입니다.
List<int> numbers = new List<int>() { 10, 20, 30, 40, 50 };
// 인덱서를 이용하여 리스트에 접근
int val1 = numbers[0]; // 10
int val2 = numbers[3]; // 40
// 인덱서를 이용하여 리스트의 요소 변경
numbers[1] = 100;
// foreach문을 이용하여 리스트의 모든 요소 출력
foreach (int number in numbers)
{
Console.WriteLine(number);
}
위 코드에서는 List<int> 클래스를 이용하여 리스트를 생성하고, 인덱서를 이용하여 리스트에 접근하고 요소를 변경하였습니다. 마지막으로 foreach문을 이용하여 리스트의 모든 요소를 출력하였습니다.
이렇게 C#에서 제공하는 다양한 컬렉션 타입도 인덱서를 이용하여 각 요소에 접근할 수 있다는 것은, 개발자가 객체를 보다 쉽게 다룰 수 있도록 도와주는 기능 중 하나입니다.
'Languages > C#' 카테고리의 다른 글
Day 9: MVVM 디자인 패턴 소개 및 구현 (0) | 2023.04.10 |
---|---|
C# 추상 클래스(abstract class) 와 인터페이스(interface) (0) | 2023.04.07 |
Day 8: WPF 커스텀 컨트롤 만들기 (0) | 2023.04.07 |
Day 7: 자원 관리 - 리소스, 스타일, 템플릿 (0) | 2023.04.06 |
Day 6: 컨트롤 소개 - TextBox, Label, Button, ComboBox, ListBox (0) | 2023.04.05 |