C# 타입을 using 선언으로 사용하는 방법?

안녕하세요 :smile:

제가 오픈소스 참고 중에 처음 보는 using 사용을 발견했습니다.
namespaceclass 사이에 KeyValuePier<T1, T2>를 정의하고 사용하는 것입니다.

유사한 네임스페이스를 다른 접두어로 선언해서 사용하는 적은 있었지만,

using wf = System.Windows.Forms;

아래와 같이 사용하는 것은 처음 보게 되었습니다.

namespace James
{
    using CommitWithChildVertex = KeyValuePair<Commit, CommitVertex>;

    public class Builder 
    {
        public Builder()
        {        
            var queue = new Queue<CommitWithChildVertex>();
            queue.Enqueue(new CommitWithChildVertex(commit, childVertex));
        }
    }
}

이 뿐만 아니라 모든 타입을 선언할 수 있다는 것을 알게 되었습니다.

그래서 질문은 이 구문을 어떻게 불러야 하는지도 궁금하고 어떤 상황에서 사용해야 좋을 지, 그리고 혹시 참고할만한 부분이 있다면 조언도 부탁드리고 싶습니다.

감사합니다.

좋아요 2

Microsoft Docs에 따르면 별칭 지시문이라고 표현하고 있네요.

https://docs.microsoft.com/ko-kr/dotnet/csharp/language-reference/keywords/using-directive

개인적으로는 문자그대로 이름이 긴 타입이나 제네릭 등을 사용할때 들어가는 타입 인자의 수가 많을때, 혹은 이름이 겹치는 타입을 이용할 때 이 지시문을 이용할 수 있다고 생각합니다. 하지만 어느 쪽이든 의미론적이든 기술적인 이유에서든 이 지시문이 필요하다는 뜻은 리팩토링이 필요하다는 신호로 보인다고 생각합니다.

좋아요 4

오오! 이렇게는 안썼는데 써봐야 곘군요! ValueTuple도 될까요?

좋아요 1

음 안되는군요;; using People = System.ValueTuple<string, int>; 이렇게는 되지만요…

좋아요 2

제 개인적으로 이 구문은 가능한 사용하지 않는 것이 좋을 것 같습니다.

단순히 이름이 길어서 또는 지금 작성하려는 코드에서 좀 더 적합한 의미를 부여하려고 사용한 것이 아니라면 비추천합니다.

제 경험담이지만 저 기능 때문에 내가 작성한 코드를 내가 못 알아봐서 로직 이해하는데 꽤 시간이 걸렸던 기억이 있습니다…

좋아요 3

아쉽게도 별칭 지시자에 들어가는 타입 이름은 무조건 Full Name이어야 합니다. (그래서 더 계륵이라고 생각해요. ㅠㅠ)

좋아요 1