nameof() 연산자를 적극 활용하라


아이템 6 : nameof() 연산자를 적극 활용하라
 - 이질적인 플랫폼과 서로 다른 언어로 개발된 프로그램 사이에서 데이터를 주고 받아야 하는 일이 많아졌으므로, 언어적 차이를 극복하기 위해 문자열 식별자에 의존하는 간단한 라이브러리들이 많이 사용된다. 하지만 문자열은 (오타가 있을 있고) 타입 정보를 없기 때문에 문제가 발생하기도 하는데.

 - nameof 해당 문제를 해결하기 위한 연산자.
아래 코드는 일반적인 nameof 활용예의 하나로 INotifyPropertyChanged 인터페이스의 구현부이다.

  • Nameof 연산자를 활용했기 때문에 속성의 이름을 변경할 경우 이벤트의 인자로 전달해야 하는 문자열도 쉽게 변경할 있다.
  • Nameof 심볼의 이름을 평가하며 타입, 변수, 인터페이스, 네임스페이스에 대하여 사용할 있다. 완전히 정규화된 이름(fully qualified name : - System.Int.MaxValue) 사용할 수도 있지만 정규화되지 않은 이름도 제한 없이 사용할 있다. 다만 제네릭 타입을 사용할 경우에는 부분적으로 제약이 있어서 모든 타입 매개변수를 지정한 닫힌 제네릭 타입만을 사용할 있다.
  • Nameof 항상 로컬 이름을 문자열로 반환하는 역할을 수행한다. 완전히 정규화된 이름을 사용하더라도 항상 로컬 이름을 반환한다.( nameof(System.Int.MaxValue) -> "MaxValue")
  • 대부분의 예외타입은 매개변수의 이름 자체를 생성자의 매개변수로 취한다. 문자열을 하드코딩 하는 대신 nameof() 사용하면 이름 바꾸기 작업을 때도 실수를 줄일 있다.

  • Exception 타입의 생성자는 2개의 문자열을 취하기 때문에 매개변수의 순서를 혼돈하기 쉽다. 정적 분석 도구를 이용하면 인자의 이름을 전달해야 하는 매개변수에 정확히 값을 전달 했는지 확인할 있다.
  • 특성attribute 매개변수로 문자열을 전달해야 하는 경우에도 nameof() 연산자를 (위치 인자, 명명된 인자 모두에 대해서) 사용할 있다. 이는 MVC 응용프로그램이나 Web API 응용프로그램 개발 시에 경로 route 지정할 특히 유용하다. 경로 이름으로 네임스페이스 이름을 사용하는 것을 고려해보는 것도 좋다.

 - nameof 연산자를 사용하면 이름을 완전히 바꾸거나 수정할 경우에도 손쉽게 변경 사항을 반영할 있다. 인자의 이름을 매개변수로 취하는 메서드를 사용할 저지르는 실수를 미연에 방지할 있다.

댓글

이 블로그의 인기 게시물

Unity - Dialogue 시스템을 구현할 때 유용한 무료 에셋

Unity - 메타 파일

Unity - 라이브러리 폴더