배열의 i번째 요소를 추출할 때 array[i] 형태로 [] 괄호를 사용했고, 마찬가지로 List 클래스도 i번째 요소를 추출할 때 list[i] 형태로 [] 괄호를 사용했습니다. 우리가 만든 클래스에서 [] 괄호를 사용하려면 어떻게 해야 할까요? 이때 사용하는 것이 인덱서(indexer) 입니다.
인덱서는 다음과 같이 선언합니다.
class Products
{
public int this[int i]
{
// Products products = new Product();
// products[i] 할 때에 호출
get { return i; }
// products[i] = 10 할 때에 호출
set { Console.WriteLine(i + "번째 상품 설정"); }
}
}
int this[int i] 라고 선언했으므로 products[i]의 자료형은 int 입니다. 값을 넣고 뺄 때 int 자료형을 사용하게 됩니다. 추가로 선언할 때 괄호 내부에 [int i]라고 적었으므로 Products 객체에 [] 괄호를 사용할 때도 괄호 내부에 int 자료형을 넣어줘야 합니다.
간단하게 인덱서를 사용하는 예제를 살펴봅시다.
SquareCalculator 클래스는 인덱서로 int 자료형의 정수를 넣으면, 해당 숫자를 제곱해서 반환해줍니다.
class SquareCalculator
{
public int this[int i]
{
get { return i * i; }
}
}
class Program
{
static void Main(string[] args)
{
SquareCalculator square = new SquareCalculator();
Console.WriteLine(square[10]);
}
}
/*
[실행 결과]
100
400
900
*/
인덱서는 메서드로 만들어서 사용해도 똑같습니다. 하지만 스스로 배열과 유사한 클래스를 만든다면, 인덱서를 활용해 기존의 배열과 비슷한 방법으로 사용하게 만드는 것이 편리하답니다.
'C# > 클래스와 객체지향' 카테고리의 다른 글
C# 클래스와 객체지향 - 21. 구조체 (0) | 2024.05.29 |
---|---|
C# 클래스와 객체지향 - 20. out 키워드 (1) | 2024.05.29 |
C# 클래스와 객체지향 - 18. 제네릭 (1) | 2024.05.29 |
C# 클래스와 객체지향 - 17. 상속과 오버라이딩 제한 (0) | 2024.05.29 |
C# 클래스와 객체지향 - 16. 하이딩과 오버라이딩 (0) | 2024.05.29 |