C# - 인덱서: 초보자 가이드

안녕하세요, 야심 찬 프로그래머 여러분! 오늘 우리는 C# 인덱서의 세계로 흥미로운 여정을 떠납니다. 프로그래밍에 새로운 사람이라고 걱정하지 마세요 - 저는 당신의 친절한 안내자가 되어 단계별로 설명해 드릴 것입니다. 그럼 시작해 보겠습니다!

C# - Indexers

인덱서는 무엇인가요?

책장을 가정해 보세요. 모든 책을 뒤지지 않고 "3번째 책을 주세요" 혹은 "'C# for Beginners'라는 제목의 책을 주세요"라고 말할 수 있다면 얼마나 좋을까요? 그게 바로 C#에서 인덱서가 하는 일입니다 - 인덱서는 컬렉션 값이 포함된 클래스에서 요소에 편리하게 접근할 수 있도록 제공합니다.

인덱서의 문법

먼저 인덱서의 기본 문법을 알아보겠습니다:

public Type this[Type index]
{
get { /* 값 반환 */ }
set { /* 값을 설정 */ }
}

이 문법이 무서워하지 마세요! 하나씩 풀어보겠습니다:

  • public: 이는 인덱서가 클래스 밖에서 접근할 수 있음을 의미합니다.
  • Type: 이는 인덱서가 반환하거나 설정할 값의 타입입니다.
  • this: 이 키워드는 인덱서를 정의하는 데 사용됩니다.
  • [Type index]: 이는 인덱스 매개변수의 타입과 이름을 지정합니다.
  • getset: 이는 값을检索하거나 설정하는 액세서 메서드입니다.

인덱서의 사용

이제 간단한 예제를 통해 인덱서를 실제로 사용해 보겠습니다:

public class Bookshelf
{
private string[] books = new string[5];

public string this[int index]
{
get { return books[index]; }
set { books[index] = value; }
}
}

이 예제에서 우리는 Bookshelf 클래스와 인덱서를 생성했습니다. 그것을 사용하는 방법은 다음과 같습니다:

Bookshelf myShelf = new Bookshelf();
myShelf[0] = "C# for Beginners";
myShelf[1] = "Advanced C#";

Console.WriteLine(myShelf[0]); // 출력: C# for Beginners

이게 정말 멋지죠? 우리는 배열처럼 접근하고 수정할 수 있지만, 사실은 커스텀 클래스를 작업하고 있습니다!

인덱서를 사용하는 이유

"그냥 배열을 사용하는 것이 아니라면?"이라고 궁금해할 수 있습니다. 인덱서는 우리에게 더 많은 제어를 제공합니다. 우리는 값을 가져오거나 설정할 때 검증, 로깅, 또는 어떤 커스텀 로직을 추가할 수 있습니다. 예를 들어:

public string this[int index]
{
get
{
if (index < 0 || index >= books.Length)
throw new IndexOutOfRangeException("Invalid book index!");
return books[index];
}
set
{
if (index < 0 || index >= books.Length)
throw new IndexOutOfRangeException("Invalid book index!");
books[index] = value;
}
}

이제 누군가가 존재하지 않는 책을 접근하려고 시도할 때, 프로그램이 충돌하지 않고 유용한 오류 메시지를 제공합니다!

오버로드된 인덱서

메서드와 마찬가지로, 인덱서도 오버로드할 수 있습니다. 이는 다양한 매개변수 타입을 가진 여러 인덱서를 가질 수 있다는 의미입니다. Bookshelf 예제를 확장해 보겠습니다:

public class Bookshelf
{
private string[] books = new string[5];

// int 매개변수를 가진 인덱서
public string this[int index]
{
get { return books[index]; }
set { books[index] = value; }
}

// string 매개변수를 가진 인덱서
public string this[string title]
{
get
{
return Array.Find(books, book => book == title);
}
set
{
int index = Array.FindIndex(books, book => book == title);
if (index >= 0)
books[index] = value;
}
}
}

이제 우리는 인덱스나 제목으로 책을 접근할 수 있습니다:

Bookshelf myShelf = new Bookshelf();
myShelf[0] = "C# for Beginners";
myShelf[1] = "Advanced C#";

Console.WriteLine(myShelf[0]); // 출력: C# for Beginners
Console.WriteLine(myShelf["Advanced C#"]); // 출력: Advanced C#

myShelf["C# for Beginners"] = "C# Mastery";
Console.WriteLine(myShelf[0]); // 출력: C# Mastery

이게 얼마나 강력한가요? 우리는 이제 Bookshelf와 다양한 직관적인 방법으로 상호작용할 수 있습니다!

인덱서 메서드 표

여기서 다루었던 인덱서 메서드의 빠른 참조 표입니다:

메서드 설명 예제
get 지정된 인덱스의 값을检索합니다 return books[index];
set 지정된 인덱스의 값을 설정합니다 books[index] = value;

결론

이제 우리는 C# 인덱서의 세계를 탐험했습니다. 기본 문법에서 오버로드된 인덱서까지. 인덱서는 코드를 더 직관적이고 쉽게 사용할 수 있게 만드는 강력한 도구입니다. 그들은 마법의 주문처럼 클래스를 사용하기 쉬운 컬렉션으로 변환합니다.

프로그래밍 여정을 계속하면서 C#의 더 많은 흥미로운 기능을 발견할 것입니다. 하지만 지금은 인덱서를 습득한 것을 자랑해 보세요! 계속 연습하고, 호기심을 가지고, 행복하게 코딩하세요!

Credits: Image by storyset