C# 프로그래밍
[C#] 인덱서
같은편
2023. 2. 24. 15:39
C# 인덱서(Indexer)는 객체의 인스턴스 변수에 대한 배열 형태의 접근 방법을 제공합니다. 인덱서를 사용하면 객체의 내부 변수에 대해 배열과 같은 방식으로 접근할 수 있습니다.
인덱서는 다음과 같은 형식으로 정의됩니다.
public returnType this[parameters]
{
get { /* 인덱서를 읽을 때 수행되는 코드 */ }
set { /* 인덱서에 쓸 때 수행되는 코드 */ }
}
위 코드에서 returnType은 인덱서가 반환하는 값의 자료형이며, parameters는 인덱서의 매개변수입니다. get 블록은 인덱서를 읽을 때 호출되며, set 블록은 인덱서에 값을 할당할 때 호출됩니다.
예를 들어, 다음은 인덱서를 사용한 클래스의 예입니다.
class MyArray
{
private int[] array = new int[10];
public int this[int index]
{
get
{
return array[index];
}
set
{
array[index] = value;
}
}
}
위 클래스는 10개의 정수를 저장하는 배열을 인덱서를 이용해 접근할 수 있도록 구현한 예입니다. MyArray 클래스의 인스턴스 변수에 접근할 때 다음과 같은 방식으로 인덱서를 사용할 수 있습니다.
MyArray arr = new MyArray();
arr[0] = 1;
int val = arr[0];
위 코드에서 arr[0]은 인덱서를 호출하는 코드입니다. 이 코드는 내부적으로 MyArray 클래스의 인덱서를 호출하여, 배열의 0번째 인덱스에 값을 할당하거나 값을 반환합니다.
인덱서를 사용하면 객체의 내부 변수에 대한 접근을 배열과 같은 방식으로 편리하게 할 수 있습니다. 이를 이용해 다양한 데이터 구조를 구현할 수 있습니다.
추가로, 인덱서를 통해 데이터를 저장하고자 할 때, 지정한 인덱서보다 배열의 크기가 작을 때 인덱스에 맞춰 배열의 크기를 재조정하는 코드입니다.
class MyArray
{
private int[] array;
public MyArray() // 생성자
{
array = new int[3];
}
public int this[int index]
{
get
{
return array[index];
}
set
{
if( index >= array.Length )
{
//Array 클래스 안에 일반화 메소드인 Resize 메소드를 이용해서
//매개변수로 array 배열을 pass by reference를 하고
//array 배열 사이즈를 index + 1 만큼 변경하는 코드
Array.Resize<int>(ref array, index + 1);
}
}
}