본문 바로가기
Languages/C#

C# Indexer

by 반도체는 프로그래밍을 좋아해 2023. 4. 7.
728x90

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#에서 제공하는 다양한 컬렉션 타입도 인덱서를 이용하여 각 요소에 접근할 수 있다는 것은, 개발자가 객체를 보다 쉽게 다룰 수 있도록 도와주는 기능 중 하나입니다.

728x90