개념
C# 6.0에서 추가된 개념으로, 임의의 기호(형식, 멤버, 변수 등)의 이름에 해당하는 문자열을 돌려준다.
심볼의 이름을 평가하며, 타입, 변수, 인터페이스, 네임스페이스에 대하여 사용할 수 있다.
완전히 정규화된 이름을 사용할 수도 있지만, 정규화되지 않은 이름도 제한 없이 사용할 수 있다. 다만, 제네릭 타입을 사용할 경우에는 부분적으로 제작이 있어 모든 타입 매개 변수를 지정한 닫힌 제네릭 타입만을 사용할 수 있다.
열린 타입 (ex. Dictionary<Tkey, Tvalue>) : 아직 결정되지 않은 타입 파라미터가 존재.
닫힌 타입 (ex. Dictionary <string, int>) : 모든 파라미터가 정해진 경우를 말함.
항상 로컬 이름을 문자열로 반환한다. 완전 정규화된 이름 (ex. System.Int.Maxvalue)을 사용하더라도 로컬 이름 (MaxValue) 반환

해당 문자열을 직접 지정하는 것에 비한 이 연산자의 장점은 정적 형식 점검이 일어난다. 참조같은 형식으로 해당 기호의 이름을 바꾸면 그에 대한 모든 참조의 이름도 바뀐다. (컴파일 시점에 평가되며 런타임의 영향을 주지 않는다)
public string Name
{
get{ return name; }
set
{
if (value != name)
{
name = value;
PropertyChanged?.Invoke(this,
new PropertyChangedEventArgs(nameof(Name)));
}
}
}
대부분의 예외 타입은 매개 변수의 이름 자체를 생성자의 매개 변수로 취한다. 이 때, nameof()로 활용하면 효율적으로 작성할 수 있다.
> 타이핑 오류 방지
> 차후 리팩토링에 유연한 구조를 만들어줌
public static void ExceptionMessage(object thisCantBeNull)
{
if (thisCantBeNull == null)
throw new ArgumentNullException(nameof(thisCantBeNull),
"We told you this can't be null");
}
열거형 문자열 이름을 가져올 때 활용할 수 있다
public class NameOfOperation
{
enum MyEnum { START, SECOND, THIRD, END };
void WriteEnum()
{
Console.WriteLine(MyEnum.SECOND.ToString());
Console.WriteLine(nameof(MyEnum.SECOND));
}
}
Console.WriteLine(MyEnum.Second.ToString());
> .Net이 enum 값을 보유하고 런타임에 이름을 찾으면 실제 상대적으로 느리다.
Console.WriteLine(nameof(MyEnum.SECOND));
> nameof()를 사용하면 .Net은 컴파일 타임에 열거형 이름을 문자열로 바꿔준다.
'프로그래밍 언어 > C#' 카테고리의 다른 글
| [C#] 문자열 소수점 자릿수 (0) | 2026.01.10 |
|---|---|
| [C#] JSON 직렬화 (Serialization) 정리 (0) | 2025.12.06 |
| [C#] Dictionary형에 LINQ 사용 (0) | 2025.07.29 |
| [C#] LINQ (링크) 메소드 (0) | 2025.07.28 |
| [C#] 6.0 using static (0) | 2025.07.28 |