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.

"Name cannot be blank",<br />

}<br />

nameof(Name));<br />

lock (syncHandle)<br />

name = value;<br />

}<br />

}<br />

// 이하 생략<br />

속성은 메서드와 매우 유사해서, 속성을 virtual로도 설정할 수 있다.<br />

public class Customer<br />

{<br />

public virtual string Name<br />

{<br />

get;<br />

}<br />

}<br />

set;<br />

앞의 몇몇 예제에서 사용한 암묵적 속성 implicit property 에 대해서도 살펴보자. 데이터를 저장하는<br />

저장소를 속성을 이용하여 감싸는 방식은 일반적인 패턴인데, 게터와 세터에서 값의 유효성을<br />

검사하는 로직이 필요 없을 수도 있다. 이 경우 <strong>C#</strong>의 암묵적 속성 문법을 사용하면 필드를 속<br />

성으로 감싸기 위한 코드를 크게 줄일 수 있다. 컴파일러는 데이터를 실제로 저장할 private<br />

필드(통상 backing store라고 부르는)와 get/set 접근자를 자동으로 생성해준다.<br />

인터페이스를 정의할 때에도 속성을 사용할 수 있다. 이 경우 암묵적 속성과 비슷한 문법을 사<br />

용한다. 다음 코드는 제네릭 generic 인터페이스를 정의할 때 속성을 사용한 예다. 암묵적 속성과<br />

비슷해 보이지만, 인터페이스의 정의이므로 어떤 구현부도 포함되지 않는다. 인터페이스는 단<br />

지 이를 구현하는 모든 타입이 반드시 준수해야 하는 계약을 정의하는 것이기 때문이다.<br />

public interface INameValuePair<br />

{<br />

string Name { get; }<br />

T Value { get; set; }<br />

}<br />

속성은 내부 데이터에 접근하거나 그 값을 수정하기 위해서 메서드의 기능을 확장한 <strong>C#</strong> 언어<br />

22 <strong>모어</strong> <strong>이펙티브</strong> <strong>C#</strong>

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

Saved successfully!

Ooh no, something went wrong!