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));
        }
    }
}

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

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

감사합니다.

3개의 좋아요

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

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

4개의 좋아요

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

1개의 좋아요

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

2개의 좋아요

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

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

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

3개의 좋아요

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

1개의 좋아요

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

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 사이에 사용할 수 있는 특별한 문법이 아니라 그냥 기존에 사용하시던 별칭 지시문이어요. =ㅁ=*

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

2개의 좋아요