24.04.2019 Views

모어 이펙티브 C#(2판) - 맛보기

빌 와그너 저/김완섭 역 | 한빛미디어 | 2019년 05월 25,000원

빌 와그너 저/김완섭 역 | 한빛미디어 | 2019년 05월
25,000원

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

의 기본 요소이다. 따라서 멤버 함수로 할 수 있는 작업이라면 속성으로도 할 수 있다. 게다가<br />

속성을 이용하면, ref나 out 키워드를 사용하는 메서드에 속성을 직접 전달할 수 없으므로, 필<br />

드를 사용할 때 내부 데이터가 외부로 노출되는 중요한 결점 하나를 해결해주기도 한다.<br />

속성의 접근자는 두 개의 독립된 메서드로 컴파일된다. <strong>C#</strong>에서는 속성의 get과 set 각각에 대<br />

해 서로 다른 접근 한정자 access modifier 를 지정할 수도 있다. 이런 유연성 덕분에 속성을 이용하면<br />

데이터의 노출 방식을 좀 더 다양하게 제어할 수 있다.<br />

public class Customer<br />

{<br />

public virtual string Name<br />

{<br />

}<br />

get;<br />

protected set;<br />

}<br />

// 이하 생략<br />

속성의 문법을 살펴보면 단순히 데이터 필드를 대체하는 그 이상의 기능을 제공한다. 어떤 타<br />

입이 여러 개의 요소를 포함하는 경우라면, 매개변수를 활용하는 속성이라 할 수 있는 인덱<br />

서 indexer 를 사용할 수 있다. 이는 여러 개의 요소를 순차적으로 사용하는 속성을 만들 때 유용<br />

하다.<br />

public int this[int index]<br />

{<br />

get => theValues[index];<br />

set => theValues[index] = value;<br />

}<br />

private int[] theValues = new int[100];<br />

// 인덱서에 접근<br />

int val = someObject[i];<br />

인덱서는 접근해야 할 요소가 하나뿐인 일반적인 속성이 제공하는 기능을 모두 지원한다. 인덱<br />

서 안에 유효성을 검증하거나 계산을 수행하는 코드를 둘 수 있으며, virtual이나 abstract로<br />

도 선언할 수 있다. 인터페이스를 정의할 때에도 사용할 수 있으며, 읽기 전용 또는 읽기/쓰기<br />

용으로도 정의할 수 있다. 정수를 매개변수로 받는 1차원 인덱서는 데이터 바인딩에 사용할 수<br />

1장 데이터 타입<br />

23

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!