You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
있고, 정수 외의 매개변수를 받는 인덱서는 맵 map 을 정의할 때 유용하다.<br />
public Address this[string name]<br />
{<br />
get => addressValues[name];<br />
set => addressValues[name] = value;<br />
}<br />
private Dictionary addressValues;<br />
<strong>C#</strong>의 다차원 배열처럼 다차원 인덱서를 만들 수도 있다. 이 경우 각 차원을 나타내는 매개변수<br />
를 동일 타입으로 지정할 수도 있지만, 서로 다른 타입을 취하도록 선언할 수도 있다.<br />
public int this[int x, int y] => ComputeValue(x, y);<br />
public int this[int x, string name] => ComputeValue(x, name);<br />
모든 인덱서는 this 키워드로 선언한다는 것에 주목하자. <strong>C#</strong>에서는 인덱서가 이름을 가질 수<br />
없다. 따라서 여러 개의 인덱서를 선언하려면 각기 매개변수 목록이 달라야 한다. 인덱서는 속<br />
성과 거의 동일한 특성을 지닌다. virtual이나 abstract가 될 수 있으며, 세터와 게터 각각에<br />
서로 다른 접근 한정자를 지정할 수 있다. 유일한 차이라면 속성과는 달리 암묵적 인덱서는 만<br />
들 수 없다.<br />
지금까지 알아본 것처럼 속성은 기능적으로 부족함이 없고, 이전보다도 훌륭하게 개선되었다.<br />
그런데도 불구하고, 데이터 멤버로 우선 사용하다가 속성이 제공하는 이점이 필요해지면 그때<br />
수정하려고 생각하는 사람도 있을 것이다. 합리적인 것처럼 보일지 모르지만, 사실 옳지 않은<br />
생각이다. 다음의 클래스 정의를 생각해보자.<br />
// public 데이터 멤버를 사용: 잘못된 예<br />
public class Customer<br />
{<br />
public string Name;<br />
}<br />
// 이하 생략<br />
이 Customer 타입은 한 명의 고객을 나타내기 위한 용도로 사용되며, Name 필드만을 가지<br />
24 <strong>모어</strong> <strong>이펙티브</strong> <strong>C#</strong>