728x90
반응형
nameof() 연산자의 활용
- nameof()는 인자로 받은 변수, 형식, 멤버의 이름 등의 다양한 타입을 문자열 자체로 반환하는 연산자
- 이를 통해 여러 타입을 문자열로 구분하여 사용하는 부분에 있어 도움을 받을 수 있음
- 여기서 제네릭 타입의 경우 닫힌 제네릭 타입(ex; Dictionary<string, double>)만 사용할 수 있음
- 이 nameof() 연산자를 활용하는 예시는 3가지로 아래의 코드와 같음
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
// 1. 파라미터명의 출력
// (여기서 'id'를 Hard coding 하지 않음; 추후에 'id'를 'identify'로 rename하여도 문제가 없음!; Refactoring에서 장점!)
throw new ArgumentException("Invalid argument", nameof(id));
// 2. 속성명을 nameof 로 추출
Console.WriteLine("{0}: {1}", nameof(objPerson.Height), objPerson.Height);
// 3. 사용하는 메서드들을 log에 추가
void Run() {
Log(nameof(Run) + " : Started");
// ... Run에 해당하는 동작들 ...
}
void Fly() {
Log(nameof(Fly) + " : Started");
// ... Fly에 해당하는 동작들 ...
}
|
cs |
- 위의 예시 코드들에서 볼 수 있는 장점 중 하나는 변수, 형식, 멤버의 이름 등이 수정되어도 문제를 발생시키지 않는다는 부분
- 타입 자체를 문자열로 출력하기 때문에 이러한 출력이 필요할 때 불필요한 hard coding을 줄여 Refactoring 시 도움을 받을 수 있음
reference
- https://devuna.tistory.com/82
- https://docs.microsoft.com/ko-kr/dotnet/csharp/language-reference/operators/nameof
- https://www.csharpstudy.com/CS6/CSharp-nameof.aspx
- https://code.i-harness.com/ko-kr/q/1e3a41c
- https://loveme-do.tistory.com/12
반응형
'Study > C#' 카테고리의 다른 글
예외가 발생할 코드에 대한 처리와 예외 발생 시 내용 logging (0) | 2022.05.01 |
---|---|
BackgroundWorker를 통해 조금 더 안전하게 이벤트 기반으로 비동기 처리를 진행하는 패턴 사용해보기 (RunWorkerAsync, IsBusy) (0) | 2021.10.13 |
String.Format()을 보간 문자열로 대체하기 (0) | 2021.07.29 |
캐스트보다는 is, as가 더 좋음 (0) | 2021.07.28 |
const보다는 readonly 사용이 권장되는 이유 (0) | 2021.07.27 |