728x90
nameof() 란?
임의의 기호(형식, 멤버, 변수 등)의 이름에 해당하는 문자열을 돌려주는 연산자.
심볼의 이름을 평가하며 타입, 변수, 인터페이스, 네임스페이스에 대해 사용할 수 있다.
완전히 정규화된 이름, 정규화되지 않은 이름 모두 제한 없이 사용할 수 있다.
다만, 제네릭 타입을 사용할 때는 부분적으로 제작이 있어 모든 타입 매개 변수를 지정한 닫힌 제네릭 타입만 사용할 수 있다.
제네릭 타입
- 열린 타입 : 아직 결정되지 않은 타입 파라미터가 존재. (ex. Dictionary<Tkey, Tvalue>)
- 닫힌 타입 : 모든 파라미터가 정해진 경우. (ex. Dictionary <string, int>)
장점
Visual Studio에서 기호 참조를 이해할 수 있기 때문에, 해당 기호의 이름을 바꾸면 그에 대한 모든 참조의 이름도 바뀐다. (이름 바꾸기 작업을 할 때 실수를 줄일 수 있다.)
단점
라이브러리 사용에 대한 추가 비용이 발생한다.
타입 정보를 손실한다.
일반적인 활용 예시
INotifyPropertyChanged
public string Name
{
get{ return name; }
set
{
if (value != name)
{
name = value;
PropertyChanged?.Invoke(this,
new PropertyChangedEventArgs(nameof(Name)));
}
}
}
예외 타입
public static void ExceptionMessage(object thisCantBeNull)
{
if (thisCantBeNull == null)
throw new ArgumentNullException(nameof(thisCantBeNull),
"We told you this can't be null");
}
Exception 타입의 생성자는 2개의 문자열을 취하기 때문에 매개변수 순서를 헷갈리기 쉬운데, 정적 분석 도구를 이용하면 매개변수에 정확히 인자의 이름을 전달했는지 확인할 수 있다.
어트리뷰트의 매개변수로 문자열을 전달해야 하는 경우 nameof()
연산자를 사용하면, MVC 응용프로그램이나 Web API 응용프로그램 개발 시 경로를 지정할 때 유용하다.
반응형
'개발공부 > C#' 카테고리의 다른 글
[Effective C#] 아이템 17 : 표준 Dispose 패턴을 구현하라 (0) | 2021.11.23 |
---|---|
[Effective C#] 아이템 7 : 델리게이트를 이용하여 콜백을 표현하라 (0) | 2021.11.22 |
[Effective C#] 아이템 4 : string.Format()을 보간 문자열로 대체해라 (0) | 2021.11.21 |
[Effective C#] 아이템 3: cast보다는 is, as가 좋다. (0) | 2021.11.20 |
[Effective C#] 아이템 2 : const와 readonly 차이 (0) | 2021.11.19 |