C#

Indexers

윤태영(Coding) 2023. 6. 16. 13:37

< Indexers 란? >

Indexers를 사용하면, 클래스나 구조체의 인스턴스를 배열처럼 쉽게 접근할 수 있다. 꼭 배열처럼 정수로 인덱스를 사용하지 않아도 된다.
Indexers는 this 키워드를 사용하여 정의한다. 보통 get 과 set 접근자를 가지며, 값을 가져오거나 설정할 수 있다.

< 실습 >

 

[Visual Studio 프로젝트 생성하기]
Visual Studio를 열고, "Create a new project"를 클릭해서. "콘솔 앱(.NET Framework)"를 선택하고, "다음" 버튼을 클릭한다.

 

프로젝트 이름을 "IndexersDemo"로 정하고, 원하는 위치에 프로젝트를 생성한다. (프로젝트 이름은 마음대로 해도 괜찮다.)

 

[클래스 생성하기]

Indexers를 적용할 샘플 클래스를 만들어봅시다. "SampleCollection"이라는 새로운 클래스를 생성한다.


프로젝트 이름을 오른쪽 클릭한 후, "클래스" > "Class"를 찾고 추가를 클릭한다.


[Indexers 코딩하기]

SampleCollection 클래스 파일에 Indexers를 추가한다.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace IndexersDemo
{
    class SampleCollection<T>
    {
        private T[] arr = new T[100];

        public T this[int i]
        {
            get => arr[i];
            set => arr[i] = value;
        }
    }
}

[Main 메서드에서 사용해보기]
이제 Program.cs 파일로 돌아가서, 만든 Indexers를 사용해본다.

using System;

namespace IndexersDemo
{
    class Program
    {
        static void Main()
        {
            var stringCollection = new SampleCollection<string>();
            stringCollection[0] = "Hello, C# !";
            Console.WriteLine(stringCollection[0]);
        }
    }
}




이제 어플리케이션을 실행해본다. Visual Studio 상단의 녹색 재생 버튼("시작")을 클릭하면. 콘솔에 "Hello, C# "라는 메시지가 출력되는 걸 볼 수 있다.


[더 간결한 문법으로 작성하기]

Indexers의 get이나 set 접근자가 단 한 줄인 경우, 표현식 본문(=>)을 사용해서 더 간단하게 쓸 수 있다.

public T this[int i]
{
    get => arr[i];
    set => arr[i] = value;
}

※ 주의사항

Indexers는 정수가 아닌 다른 타입으로도 인덱싱할 수 있다.
Indexers를 여러 개 정의하여 오버로드할 수 있다.
Indexers는 두 개 이상의 매개변수를 가질 수 있다. (예: 2차원 배열 접근).

Reference  : 이것이 C#이다 3판

https://product.kyobobook.co.kr/detail/S000201856223

 

이것이 C#이다 | 박상현 - 교보문고

이것이 C#이다 | 전문가로 레벨업!C# 프로그래밍 완전 정복이 책은 C#의 기본, 고급 문법과 더불어 기초 클래스 라이브러리까지 다루고 있다. 총 22개 장으로, 앞서 배운 내용을 활용하면서 단계별

product.kyobobook.co.kr

https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/indexers/

 

Indexers - C# Programming Guide

Indexers in C# allow class or struct instances to be indexed like arrays. You can set or get the indexed value without specifying a type or instance member.

learn.microsoft.com