목표

  • 인덱서(Indexer) 대해 알아보자

Indexer

  • 인덱서는 인덱싱된 속성, 즉 하나 이상의 인수로 참조된 속성을 사용할 수 있게 한다.
  • 프로퍼티 동일한 언어 기능을 기반으로 동작한다.
  • 프로퍼티는 접근자를 통해 데이터에 접근하고, 인덱스는 인덱스(index)를 통해 접근한다.
class {클래스}
{
    {접근자} {인덱서} this[{타입} {인덱스}]
    {
        get
        {
            // 데이터 읽기
        }
        set
        {
            // 데이터 쓰기
        }
    }
}

Indexer 예시

  • 아래는 간단한 인덱서의 예시이다.
  • 인덱서에 사용되는 엑데스는 int 뿐만 아니라, string 등으로 다양하게 응용할 수 있다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ScoreData
{
    public List<int> score = new List<int>();

    public int this[int index]
    {
        get
        {
            if(index < 0)
            {
                throw new System.IndexOutOfRangeException("Cannot index less than 0.");
            }
            else if(index >= score.Count)
            {
                throw new System.IndexOutOfRangeException("Index Out Of Range.");
            }

            return score[index];
        }
        set
        {
            if (index < 0)
            {
                throw new System.IndexOutOfRangeException("Cannot index less than 0.");
            }
            else if (index > score.Count)
            {
                throw new System.IndexOutOfRangeException("Index Out Of Range.");
            }
            else if (index == score.Count)
            {
                score.Add(value);
            }
            else
            {
                score[index] = value;
            }
        }
    }
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SampleScript : MonoBehaviour
{
    ScoreData scoreData = new ScoreData();

    // Start is called before the first frame update
    void Start()
    {
        scoreData[0] = 1;
        scoreData[0] = 2;
        scoreData[1] = 3;

        Debug.Log(scoreData[0]);
        Debug.Log(scoreData[1]);
        //Debug.Log(scoreData[2]);
    }

    // Update is called once per frame
    void Update()
    {

    }
}

+ Recent posts