속성과 인덱스는 C#에서 데이터에 접근하는 방식을 캡슐화하는 메커니즘이다.
속성은 클래스, 구조체, 인터페이스 내에서 사용되며, 필드에 대한 읽기와 쓰기 액세스를 제어하는 방법을 제공한다.
public class Person{
private string name;
public string Name{
get{ return name; }
set{ name = value; }
}
}
기존 C#은 이런식으로 속성을 작성한다. 그리고 C# 6.0부터 속성을 자동구현된 속성 초기화
를 쓸 수 있다.
public class Person{
public string Name { get; set; } = "Unknown"
// 자동구현된 속성과 초기화
}
인덱서는 클래스나 구조체가 배열처럼 인덱스를 사용하여 내부 컬렉션의 요소에 접근할 수 있게 해주는 기능이다.
public 반환타입 this[인덱스형 인덱스]{
get{
// 인덱스를 사용하여 값을 반환
}
set{
// 인덱스를 사용하여 값을 설정
}
}
int 배열을 감싸는 간단한 클래스에 인덱서를 구현한 예제
public class IntArrayWrapper{
private int[] array = new Int[100];
// 인덱서 구현
public int this[int i]{
get{ return array[i]; }
set{ array[i] = value; }
}
}
위의 IntArrayWrapper
는 내부배열 array
에 대한 인덱서를 제공한다. 이를 통해서 클래스의 인스턴스를 배열처럼 사용할 수 있다.
var wrapper = new IntArrayWrapper();
wrapper[0] = 1; // set 접근자 호출
Console.WriteLine(wrapper[0]);
// get 접근자 호출, 1을 출력
인덱서는 다음과 같은 고급기능도 제공한다.
1. 다중 인덱스
인덱서는 하나 이상의 인덱스를 지원할 수 있다.
예를 들어서 2차원 배열이나 매트릭스에 대한 접근을 제공할 수 있다.
string
이나 사용자정의타입
으로 인덱싱할 수 있다.public class Matrix{
private double[,] data = new double[10,10];
public double this[int x, int y]{
get{ return data[x,y]; }
set{ data[x,y] = value; }
}
}
인덱서는 개체의 내부 컬렉션 또는 배열에 대한 접근을 제어하고 캡슐화하는 강력한 방법을 제공한다. 이를 통해서 사용자에게 간단하고 직관적인 방식으로 데이터에 접근할 수 있는 인터페이스를 제공할 수 있다.