C#/이펙티브 C#

아이템6.nameof 연산자를 적극 활용하라.

공부를하자 2023. 6. 24. 16:42

1.nameof 연산자

1)개요

서로 다른 시스템 서로 다른 언어에서 데이터를 주고 받는데

문자열에 의존하는 경우가 많았다.

문자열은 타입 정보를 손실한다는 것이 단점이다.

이러한 점은 타입 정보를 가지고 추가기능을 제공하는 개발도구(IDE) 장점을 잃어버린다.

문제해결을 위해 C#6.0에서 추가된 nameof연산자다.

2)정의

 -변수, 인터페이스,타입,네임스페이스 등의 이름을 문자열 상수로 생성한다.

 -nameof식은 컴파일시간에 계산되며 런타임에 영향을 주지 않는다.

 - 제네릭 타입을 사용할 경우 매개변수의 타입이 확정된 경우(닫힌제네릭) 사용할 있다.

    *닫힌제네릭:매개변수의 타입이 확정된 경우

    *열린제네릭: 타입이 확정되지 않은 매개변수가 남아있을 경우

  -정규화된 이름도 비정규화된 이름도 제한없이 사용가능하다.

 -항상 로컬 이름을 문자열로 반환한다. 완전 정규화된 이름(ex. System.Int.MaxValue)을 사용하더라도

  로컬 이름(MaxValue)을 반환한다

3)예제

 

 

4)결론:

-문자열을 매개변수로 취할 nameof 연산자를 활용하자.

 

5)필자의 경우

개인적으로 필자는 포톤네트워크(유니티 서버를 구축하는 패키지이다.) 요긴하게 썻다.

포톤 네트워크에는 다른 이들에게도 어떤 함수를 실행시키라고 명령을 보내는 RPC라는 기능이 있는데

매개변수로 함수의 이름의 문자열을 갖는다. 

함수 이름을 nameof 사용하여 Visual studio(IDE)에서 함수 이름이 잘못될 경우 정적검사를 하고

함수의 위치까지 찾을 있게 했다.