Learning
When: 1학년 8월 22일
How:
식 본문 멤버를 공부하다 그 기능을 사용할 수 있는 것들 중 인덱서가 있다는 것을 알았는데, 인덱서가 뭔지 몰랐기 때문에 인덱서를 먼저 공부하게 되었습니다.
Understanding:
- 설명 : 인덱서는 프로퍼티의 확장형 형태입니다. 원래 프로퍼티는 이름이 따로 있고, get, set을 이용하여
'프로퍼티 = 10;', 'Console.WriteLine(프로퍼티);' 이렇게 사용되는데, 인덱서는 클래스명[인수] = 10;
이렇게 사용됩니다. 그리고 이름도 그렇고 인수를 전달하는 대괄호만 봐도 배열이나 컬렉션 전용 프로퍼티 같은
기능인 줄 알았는데, 사실 배열, 컬렉션을 사용할 수 있는 프로퍼티인 것이지 그것만 사용해야 하는 것은 아닙니다.
쉽게 프로퍼티 + 매개 변수라고 생각하셔도 될 것 같습니다. 대괄호가 있기 때문에 객체를 배열처럼 보이게
만들어 사용자 정의 컬렉션으로 활용할 수도 있습니다. - 사용법 : 아래의 코드는 인덱서를 사용한다기보다는, 인덱서는 프로퍼티와 별로 다를 것 없는 쉬운 기능이라는
것을 보여주기 위한 코드입니다. 인덱서가 프로퍼티의 확장형인 만큼, 프로퍼티와 비교하여 설명해 보겠습니다.
선언은 Indexer 클래스에서 하기 때문에 Indexer 클래스를 먼저 봐주시면 되는데, 'public 반환 타입' 까지는
프로퍼티와 같지만 갑자기 this가 나오더니 대괄호에 인수까지 나오게 됩니다.
여기서 this는 이 클래스를 뜻하고, 대괄호는 그냥 인수를 전달할 인수이기 때문에 메서드에 대입해서 생각해 본다면
'메서드 이름()' 이렇게 사용하는 것 처럼 '인스턴스[]' 이렇게 사용할 수 있다는 것을 알 수 있습니다.
여기서 주의 할 점이 있는데, 인덱서는 프로퍼티 + 매개 변수이기 때문에 인수가 하나 이상은
있어야 한다는 것입니다. 남은 부분은 프로퍼티와 같습니다. 매개 변수를 이용할 수 있다는 것만 빼면
매개 변수를 써서 배열의 요소를 반환하든, 그냥 아무거나 반환하든, set을 쓰지 않든 다 할 수 있습니다.
internal class Program
{
static void Main(string[] args)
{
Indexer indexer = new Indexer();
foreach (string str in indexer["a"])
{
Console.WriteLine(str);
}
}
}
public class Indexer
{
public string[] this[string a]
{
get
{
return new string[10];
}
}
}
Result: 인덱서가 쉽기도 하고 유용해서 왜 아직 모르고 있었나 싶습니다. 예시 코드는 없지만 프로퍼티에 매개 변수를 사용할 수 있기 때문에 배열이나 컬렉션도 쉽게 프로퍼티로 사용할 수 있고, 굳이 그것들이 아니어도 switch 문을 사용하는 등 유용하게 쓰일 것 같습니다.
'C#' 카테고리의 다른 글
| [C#] 튜플 (0) | 2025.08.24 |
|---|---|
| [C#] 식 본문 멤버 (0) | 2025.08.23 |
| [C#] where 키워드 (Generic 제한) (0) | 2025.08.20 |
| [C#] Notify Value (0) | 2025.08.19 |
| [C#] StringBuilder (1) | 2025.08.12 |