반응형
[C#] 인덱서(Indexer) : 배열과 유사한 접근성 제공
안녕하세요! 이번 포스트에서는 C#의 인덱서(Indexer)에 대해 알아보겠습니다. 인덱서는 클래스나 구조체에 배열과 유사한 접근성을 제공하여, 인스턴스의 특정 요소에 접근할 수 있는 메커니즘을 제공합니다.
인덱서(Indexer)란 무엇인가요?
인덱서는 클래스나 구조체에서 배열처럼 인덱스를 사용하여 멤버에 접근할 수 있도록 하는 메커니즘입니다. 일반적으로 배열에서 인덱스로 요소에 접근하는 것과 유사한 구문을 사용하여 인덱서를 호출할 수 있습니다.
인덱서의 기본 구조
public class MyClass
{
private string[] data = new string[10];
public string this[int index]
{
get => data[index];
set => data[index] = value;
}
}
위 예시에서 MyClass 클래스에는 인덱서가 정의되어 있습니다. 이 인덱서는 string 배열에 접근하는 기능을 제공합니다.
인덱서의 사용법
인덱서는 다양한 데이터 구조에서 유용하게 사용될 수 있습니다. 주로 컬렉션 클래스나 데이터 접근 객체에서 자주 활용됩니다.
컬렉션 클래스에서의 인덱서 사용
public class MyCollection<T>
{
private T[] items = new T[10];
public T this[int index]
{
get => items[index];
set => items[index] = value;
}
}
class Program
{
static void Main(string[] args)
{
MyCollection<int> collection = new MyCollection<int>();
collection[0] = 1;
collection[1] = 2;
Console.WriteLine(collection[0]); // 1
Console.WriteLine(collection[1]); // 2
}
}
위 예시에서 MyCollection<T> 클래스에는 제네릭으로 구현된 인덱서가 있습니다. 이를 통해 컬렉션에 있는 요소에 인덱스를 사용하여 접근할 수 있습니다.
데이터 접근 객체에서의 인덱서 사용
public class DataAccess
{
private Dictionary<int, string> data = new Dictionary<int, string>();
public string this[int key]
{
get => data[key];
set => data[key] = value;
}
}
class Program
{
static void Main(string[] args)
{
DataAccess dataAccess = new DataAccess();
dataAccess[1] = "Data 1";
dataAccess[2] = "Data 2";
Console.WriteLine(dataAccess[1]); // Data 1
Console.WriteLine(dataAccess[2]); // Data 2
}
}
위 예시에서 DataAccess 클래스에는 Dictionary<int, string>을 사용한 인덱서가 있습니다. 이를 통해 키를 사용하여 데이터에 접근할 수 있습니다.
인덱서의 주의사항
- 인덱서의 인덱스는 일반적으로 배열처럼 정수형이어야 합니다.
- 인덱서는 여러 개 정의할 수 있지만, 인덱스 매개변수의 개수와 타입은 서로 달라야 합니다.
- 인덱서는 프로퍼티와 마찬가지로 get과 set 접근자를 가질 수 있습니다.
마치며
이번 포스트에서는 C#의 인덱서(Indexer)에 대해 알아보았습니다. 인덱서를 사용하면 배열과 유사한 방식으로 클래스나 구조체의 멤버에 접근할 수 있어, 데이터 구조를 더욱 유연하고 편리하게 다룰 수 있습니다. 추가적인 질문이나 궁금한 점이 있다면 언제든지 댓글로 남겨주세요!
반응형
'Programming > C#' 카테고리의 다른 글
C# 델리게이트(Delegate) 메서드 참조의 강력한 도구 (0) | 2024.06.09 |
---|---|
C# 구조체(Struct) 경량화된 값 형식 (0) | 2024.06.09 |
C# 제네릭 (Generics) 타입의 유연성과 안전성을 동시에 (0) | 2024.06.09 |
C# 섀도잉(Shadowing)과 하이딩(Hiding) 멤버 숨김의 이해 (0) | 2024.06.09 |
C# 다형성 (Polymorphism) 객체지향 프로그래밍의 유연성과 확장성 (0) | 2024.06.09 |