1.nameof 연산자
1)개요
서로 다른 시스템 및 서로 다른 언어에서 데이터를 주고 받는데
문자열에 의존하는 경우가 많았다.
문자열은 타입 정보를 손실한다는 것이 단점이다.
이러한 점은 타입 정보를 가지고 추가기능을 제공하는 개발도구(IDE)의 장점을 잃어버린다.
문제해결을 위해 C#6.0에서 추가된 게 nameof연산자다.
2)정의
-변수, 인터페이스,타입,네임스페이스 등의 이름을 문자열 상수로 생성한다.
-nameof식은 컴파일시간에 계산되며 런타임에 영향을 주지 않는다.
- 제네릭 타입을 사용할 경우 매개변수의 타입이 확정된 경우(닫힌제네릭)만 사용할 수 있다.
*닫힌제네릭:매개변수의 타입이 확정된 경우
*열린제네릭: 타입이 확정되지 않은 매개변수가 남아있을 경우
-정규화된 이름도 비정규화된 이름도 제한없이 사용가능하다.
-항상 로컬 이름을 문자열로 반환한다. 완전 정규화된 이름(ex. System.Int.MaxValue)을 사용하더라도
로컬 이름(MaxValue)을 반환한다
3)예제

4)결론:
-문자열을 매개변수로 취할 떄 nameof 연산자를 활용하자.
5)필자의 경우
개인적으로 필자는 포톤네트워크(유니티 서버를 구축하는 패키지이다.)에 요긴하게 썻다.
포톤 네트워크에는 다른 이들에게도 어떤 함수를 실행시키라고 명령을 보내는 RPC라는 기능이 있는데
이 때 매개변수로 함수의 이름의 문자열을 갖는다.
함수 이름을 nameof를 사용하여 Visual studio(IDE)에서 함수 이름이 잘못될 경우 정적검사를 하고
함수의 위치까지 찾을 수 있게 했다.
'C# > 이펙티브 C#' 카테고리의 다른 글
| 아이템8.이벤트 호출 시에는 null 조건 연산자를 사용하라. (0) | 2023.06.29 |
|---|---|
| 아이템7. 델리게이트를 이용하여 콜백을 표현하라. (0) | 2023.06.25 |
| 아이템5.문화권별로 다른 문자열을 생성하려면 FormattableString을 사용하라. (0) | 2023.06.23 |
| 아이템4. string.Format()을 보간 문자열로 대체하라. (0) | 2023.06.21 |
| 아이템3. 캐스팅보다는 is,as가 좋다. (0) | 2023.06.18 |