티스토리 뷰
6) nameof() 연산자를 적극 활용하라
분산 시스템이 널리 활용되면서 서로 다른 플랫폼, 언어로 개발된 프로그램들 사이에서도 데이터를 주고 받을 일이 많아졌다. 이런 차이를 극복하기 위해서 이름이나 string 식별자에 의존하는 라이브러리들이 많이 사용된다고 한다. 하지만 이런 방식은 간편할지라도 여러가지 단점이 생기곤 하는데, 가장 대표적인 단점이 타입 정보를 손실한다는 것이다. 이로 인해서, 타입 정보를 활용해서 추가 기능을 제공하는 개발 도구를 쓰는데 어려움을 겪고, 정적 타입 언어이 주요 장점을 상실한다.
그래서 C# 설계팀은 C# 6.0에 nameof()라는 연산자를 추가했다. 이 키워드는 심볼 그 자체를 해당 심볼을 포함하는 string으로 대체해준다.
name of 연산자를 쓰기 좋은 예시 중 하나가 바로 INotifyPropertyChanged 인터페이스의 구현부이다.
nameof() 연산자를 사용했기 때문에 Property의 이름을 변경할 경우에도 이벤트의 인자로 전달해야 하는 string도 쉽게 변경할 수 있다.
nameof() 연산자는 항상 로컬 이름을 문자열로 반환하는 역할을 수행한다. 완전히 정규화된 이름(ex : System.Int.MaxValue)을 사용하더라도 항상 로컬 이름(MaxValue)를 반환한다.
또, string 인수 여러 개를 매개변수로 취하는 메서드를 다룰 때도, 지역 변수나 멤버의 이름을 string으로 대입할 때는 nameof() 연산자를 취하는 편이 코딩 실수를 줄여줄 수 있다.
다음 코드는 지역 변수를 nameof() 연산자로 넣고 메시지를 기본 string 입력 방식대로 넣은 예시이다. 이런 식으로 매개변수를 넣어주면 순서를 헷갈리거나 빼먹는 일은 줄어들 것이다.
nameof() 연산자를 사용하면 심볼의 이름을 완전히 바꾸거나 수정할 경우에 쉽게 그 변경 사항을 반영할 수 있다.
가능한 한 (string화 되지 않은 형태로) 심볼을 유지할 수 있다면 자동화 도구를 활용할 수 있는 가능성이 높아지기 때문에, 다른 도구를 사용하거나 개발자가 직접 내용을 눈으로 검토하는 것에 비해 오류를 발견하기 쉽다. 결국 더 어려운 문제에 역량을 집중할 수 있는 기반이 된다.
지금까지 PropertyChanged() 메서드를 쓸 때 전부 기본 string 형식으로 입력했던 걸 수정할 때 일일이 찾아가면서 수정했던게 기억난다...이 때 nameof()를 알아더라면..
참거 - Effective C# <강력한 C# 코드를 구현하는 50가지 전략과 기법, 이펙티브>, 빌 와그너, 김명신, 한빛미디어
'Programming > Effective C#' 카테고리의 다른 글
[Effective C# Item 8] 이벤트 호출 시에는 null 조건 연산자(?.)를 사용하라 (0) | 2020.10.18 |
---|---|
[Effective C# Item 7] 델리게이트를 이용하여 콜백을 표현하라 (0) | 2020.10.18 |
[Effective C# Item 5] 문화권별로 다른 문자열을 생성하려면 FormattableString을 사용하라 (0) | 2020.10.18 |
[Effective C# Item 4] string.Format()을 보간 문자열로 대체하라 (0) | 2020.10.18 |
[Effective C# Item 3] 캐스트보다는 is, as가 더 좋다 (0) | 2020.10.18 |