Namespace
Peponi │ 12/11/2024 │ 3m
C#
SyntaxKeywordNamespace
Namespace
12/11/2024
3m
Peponi
C#
SyntaxKeywordNamespace
1. Introduction
namespace
키워드는 코드를 구성하는 고유한 전역 형식
을 선언하는 데 사용한다. 모든 namespace
는 암시적으로 public
이며 한정자를 적용할 수 없다.
namespace
내에는 다음과 같은 형식을 선언할 수 있다.
2. Example
namespace Foo
{
class Bar { }
namespace Nested
{
class MyClass { }
}
}
namespace
는 partial 형식과 마찬가지로 여러 파일에 나누어 선언할 수 있다.
namespace Foo
{
class Bar { }
}
namespace Foo
{
namespace Nested
{
class MyClass { }
}
}
상기 File2.cs
의 선언은 아래의 선언과 동일하다.
namespace Foo.Nested
{
class MyClass { }
}
3. File scoped namespace
C# 10 버전 이상에서는 파일 단위 namespace
선언이 가능하다.
namespace Foo;
class Bar { }
상기 예시와 같이 namespace
를 선언하게 되면 File1.cs
에 있는 모든 코드는 Foo
namespace
에 속하는 것으로 간주되며 여러 파일에 걸쳐 적용할 수도 있다.
namespace Foo;
class Bar { }
namespace Foo;
class MyClass { }
한편 file scoped namespace 선언은 nested
를 허용하지 않는다. 아래와 같은 namespace
선언은 파일 단위 네임스페이스에서는 불가능하다.
namespace Foo;
class Bar { }
namespace Nested; // CS8954
namespace Nested { } // CS8955
4. Default namespace
모든 네임스페이스의 최상위 요소에는 컴파일러가 추가한 기본 네임스페이스가 있다. Console project
에 추가되는 ConsoleApp
namespace
, WinForms project
에 기본으로 추가되는 WinFormsApp
namespace
등은 모두 기본 네임스페이스 아래에 있다.
using System;
// default namespace (Global)
public class DefaultNSClass
{
public void Write() => Console.WriteLine("Hello, World!");
}
namespace ConsoleApp1
{
internal class Program
{
private static void Main(string[] args)
{
DefaultNSClass defaultNSClass = new DefaultNSClass();
defaultNSClass.Write();
}
}
}
using System;
namespace ConsoleApp2
{
internal class Program
{
private static void Main(string[] args)
{
// Don't need to declare 'using ~'
DefaultNSClass defaultNSClass = new DefaultNSClass();
defaultNSClass.Write();
}
}
}