C#의 네임스페이스 별칭

Aimen Fatima 2023년10월12일
  1. C#의 네임스페이스
  2. C#using 지시문
  3. C#의 별칭
C#의 네임스페이스 별칭

이 자습서는 C#의 네임스페이스 별칭 개념을 이해하는 데 도움이 됩니다. 이 개념을 완전히 이해하는 데 도움이 되는 데모 코드를 구현할 것입니다.

C#의 네임스페이스

C#에서 네임스페이스는 메서드, 클래스, 구조체 및 열거형을 논리적으로 구성하여 효율적으로 만들고 함수 및 클래스의 범위를 제어하는 데 사용됩니다.

유형 또는 네임스페이스 별칭은 코드를 이해하기 쉽게 만들고 개발자의 시간을 절약하는 데 도움이 됩니다. 유형 앨리어싱은 단일 네임스페이스에서 특정 클래스 또는 함수의 앨리어스를 지정하려는 경우에 유용합니다.

using 키워드를 사용하면 C#에서 이러한 기능에 액세스할 수 있습니다.

C#using 지시문

C#의 using 컴파일러 지시문을 사용하여 범위를 정의할 수 있습니다. 네임스페이스의 별칭을 만들거나 클래스의 정적 멤버를 가져오거나 다른 네임스페이스에서 특정 유형을 가져오는 데 사용할 수도 있습니다.

콘솔 입력 및 출력은 프로그래밍의 기본입니다. C#에서 System 네임스페이스의 Console 클래스는 콘솔 작업(예: 입력 또는 출력)을 수행하는 데 사용됩니다.

WriteLine(), ReadLine() 등에 액세스하기 위해 C# 프로젝트에서 using System으로 사용한 적이 있어야 합니다.

C#의 별칭

별칭은 네임스페이스/클래스의 긴 이름을 짧은 이름으로 대체하여 모호한 문이나 클래스를 피하는 데 도움이 됩니다. 원래의 논리적 기능을 재교육합니다.

개발자는 별칭을 사용하여 네임스페이스 기능을 보다 빠르고 효과적으로 활용할 수 있습니다. 프로그램 실행 시간에 악영향을 미치지 않습니다. 오히려 개발 시간을 가속화합니다.

먼저 개념을 이해하기 위해 간단한 C# 콘솔 프로젝트를 만들고 별칭을 사용하지 않는 다음 코드를 작성해 보겠습니다.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace NamespaceAliasing {
  class Program {
    static void Main(string[] args) {
      Console.WriteLine("Hi! I am a Console.WriteLine");
      Console.Write("Let me know your good name: ");
      var name = Console.ReadLine();
      Console.WriteLine("Welcome: " + name);
      Console.ReadKey();
    }
  }
}

user를 입력으로 입력하면 출력은 다음과 같습니다.

Hi! I am a Console.WriteLine
Let me know your good name: user
Welcome: user

Visual Studio에서 콘솔 C# 프로젝트를 만들 때 일부 기본 네임스페이스를 자체적으로 가져옵니다. 보시다시피 using System 및 기타 네임스페이스는 소스 파일 위에 가져옵니다.

네임스페이스를 가져올 때 컴파일러는 해당 네임스페이스의 모든 멤버 클래스, 메서드 및 변수에 액세스해야 한다는 것을 알고 있습니다. 따라서 System 네임스페이스를 가져오면 ReadLine(), WriteLine(), Write() 메서드에 액세스할 수 있습니다.

이제 Console 클래스에 대한 별칭을 만들어 관련 메서드를 호출하는 동안 항상 입력할 필요가 없도록 합시다. 다음 코드에서 System.Console에 대한 별칭 S를 만들었습니다.

이제 Console을 입력하는 대신 별칭 S를 사용하여 콘솔 메서드에 액세스할 수 있습니다.

별칭은 식별자의 다른 이름일 뿐이므로 이전 식별자는 이전에 사용할 수 있었던 것처럼 작동합니다.

예를 들어, 다음 코드에서 System.Console은 별칭을 선언하기 전과 마찬가지로 여전히 액세스 가능하고 작동합니다.

using S = System.Console;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace NamespaceAliasing {
  class Program {
    static void Main(string[] args) {
      S.WriteLine("Hi! I am a S.WriteLine");
      S.Write("Let me know your good name: ");
      var name = S.ReadLine();
      S.WriteLine("Welcome: " + name);
      System.Console.WriteLine("I am Console.WriteLine");
      S.ReadKey();
    }
  }
}

출력:

Hi! I am a S.WriteLine
Let me know your good name: user
Welcome: user
I am Console.WriteLine

별칭의 또 다른 용도는 다른 네임스페이스의 여러 클래스를 사용해야 하지만 이름이 같은 유형이 있는 경우입니다.

특정 클래스를 참조하는 전체 이름을 사용하여 이를 구현하거나 별칭을 사용하여 네임스페이스 및 액세스 유형에 대한 별칭을 만들 수 있습니다.

다음 예제에서는 두 네임스페이스에 이름이 같은 메서드가 있는 시나리오를 보여줍니다.

using S = System.Console;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace NamespaceAliasing {
  using Alias1 = NameSpace1.ClassOne;
  using Alias2 = NameSpace2.ClassTwo;
  class Program {
    static void Main(string[] args) {
      var object1 = new Alias1();
      object1.Sample();
      var object2 = new Alias2();
      object2.Sample();
      S.ReadKey();
    }
  }
}
namespace NameSpace1 {
  public class ClassOne {
    public void Sample() {
      S.WriteLine("I am a Sample from Namespace1");
    }
  }
}

namespace NameSpace2 {
  class ClassTwo {
    public void Sample() {
      S.WriteLine("I am a Sample from Namespace2");
    }
  }
}

출력:

I am a Sample from Namespace1
I am a Sample from Namespace2

위의 코드 스니펫에는 NameSpace1NameSpace2라는 두 개의 네임스페이스가 있습니다. 둘 다 각각 ClassOneClassTwo,라는 클래스가 있습니다.

두 네임스페이스의 메서드는 이름이 같으므로 이름만 사용하여 호출하면(예: Sample()) 컴파일러는 호출되는 네임스페이스를 지정할 수 없습니다.

올바른 실행을 위해 Namespace1.ClassOne.Sample()을 입력하여 완전한 참조를 지정해야 합니다.

코드에서 여러 번 사용하면 어렵고 모호합니다. 이 문제는 위의 예제 코드에서 생성한 대로 네임스페이스의 별칭을 생성하여 해결할 수 있습니다.

매번 Namespace1.ClassOne.Sample을 입력할 필요가 없습니다. 대신 Alias1Alias2라는 별칭을 사용할 수 있습니다.

별칭은 클래스의 정적 멤버를 참조하고 전체 참조를 입력하는 대신 이름으로 사용할 수 있습니다. 예를 들어 System 네임스페이스의 Math 클래스에는 Sqrt()와 같은 정적 함수와 PIE와 같은 정적 멤버가 포함됩니다.

다음은 별칭을 만들어 다른 네임스페이스에서 정적 함수를 호출하는 예입니다.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static NameSpace1.SampleClass;

namespace StaticAliasing {
  class Program {
    static void Main(string[] args) {
      function1();
      Console.ReadKey();
    }
  }
}
namespace NameSpace1 {

  public class SampleClass {
    public static void function1() {
      System.Console.WriteLine("I am a static function.");
    }
  }
}

출력:

I am a static function.

프로그램 전체에서 function1()을 여러 번 사용해야 한다고 상상해 보십시오. 매번 NameSpace1.SampleClass.function1을 입력해야 합니다.

그러나 이제 우리는 그것을 그 이름으로 부를 수 있습니다. 자세한 내용은 using directive in C#을 참조하세요.