인덱서 (Indexer)

2021. 6. 17. 22:43
728x90

 [ 인덱서 ] 

인덱서(Indexer) : 색인 (속성+배열)

역할 : class 내의 배열,컬렉션을 외부에서 접근할 수 있도록 하는 역할

형식 : 속성 형식(get, set, return, value) + 배열 형식(this[int index])

// 방법1

객체명[index] = 값 또는 변수; //값을 배열의 해당 index 위치에 저장 (set)

// 방법2

변수 = 객체명[index]; //해당 index의 값을 변수에 저장 (get)

 

정확한 사용 형식은 아래와 같다 :

[접근한정자] 데이터형 this[int index]{
	
    get{ }
	
    set{ }

} //외부로부터 받아온 값을 set, 인덱서 배열에 저장된 값을 외부로 전달 get

 

 

 [ 속성 vs. 인덱서 ] 

  • 공통점 : 객체의 멤버 변수를 read, write함
  • 차이점 : 속성은 변수, 인덱서는 배열 형태임

 

 [ 인덱서 예시 ] 

배열 사용

class A {

	private int[] number = new int[5];

	public int this[int index]{

		get{ return number[index]; }

		set{ number[index] = value; }

	}

}

class Program{

	static void Main(string[] args){

		A test = new A();

		for(int ii = 0; ii<5 ; ii++){

			test[ii] = ii;  //set. 변수test를 배열로 선언하지 않았지만 class A에 indexer가 있기 때문에 배열형으로 사용 가능

			Console.WriteLine(test[ii]); //get

		}

	}
    
}



컬렉션 사용

using System.Collections;

...

class A{

	ArrayList list = new ArrayList(); //접근한정자는 자동으로 private으로 설정됨

	public string this[int index]{

		get{

			if(index >= 0 && index < list.Count) return (string)list[index];

			else return null;

		}

		set{

			if(index >= 0 && index < list.Count) list[index] = value;

			elseif(index == list.Count) list.Add(value);

		}
	}

}

public void Print(){

	foreach(string m in list){

		Console.WriteLine(m);

	}

}


class Program{

	static void Main(string[] args){

		A test = new A();

		test[0] = "A";  // test[].~ 형태가 아니가 '='을 이용하므로 indexer임을 알 수 있음

		test[1] = "B";

		...

		test.Print();

		test[1] = "Hello World";

		test.Print(); // "B"대신 윗 줄이 출력됨

	}

}
728x90

'C# > C# 문법' 카테고리의 다른 글

속성(Property)  (0) 2021.06.17
다형성 (Polymorphism)  (0) 2021.06.17
오버라이드(Override), 오버로드 (Overload)  (0) 2021.06.17
상속(Inheritance), 추상클래스(Abstract Class)  (0) 2021.06.17
파일 입출력  (0) 2021.06.15

BELATED ARTICLES

more