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

안녕하세요 :smile:

제가 오픈소스 참고 중에 처음 보는 using 사용을 발견했습니다.
namespace와 class 사이에 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));
        }
    }
}

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

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

감사합니다.

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

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

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

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

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

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

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

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

오래된 글이지만… 저거는 그냥 별칭 지시문이에요.

using 을 이용한 namespace 참조는 namespace 밖뿐만 아니라, 안에서도 사용할 수 있습니다.

using System;
using System.Collections.Generic;
using System.Linq;

namespace MyApp
{
    public class Program
    {
        public static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
        }
    }
}

요거를

namespace MyApp
{
    using System;
    using System.Collections.Generic;
    using System.Linq;

    public class Program
    {
        public static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
        }
    }
}

요로케도 쓸 수 있어요.
요로케 하면 using 지시의 참조 범위를 해당 현재 namespace scope 으로 제한할 수 있죠.

예로 드신 using 문 사용은
namespace 와 class 사이에 사용할 수 있는 특별한 문법이 아니라 그냥 기존에 사용하시던 별칭 지시문이어요. =ㅁ=*

그냥 위치만 안 쪽으로 들어온겁니당 ~ㅁ~