C# 네임스페이스 이해하기: 이름 충돌 방지와 코드 조직화
네임스페이스(Namespace)는 한 집합의 이름을 다른 집합과 분리하여 관리하는 방법을 제공합니다. 한 네임스페이스에 선언된 클래스 이름이 다른 네임스페이스의 같은 클래스 이름과 충돌하지 않습니다.
네임스페이스 정의
namespace 네임스페이스_이름
{
// 코드 선언
}
네임스페이스에 속한 함수나 변수를 호출하려면 네임스페이스 이름을 접두사로 붙입니다.
네임스페이스_이름.항목_이름;
네임스페이스 사용 예제
using System;
namespace FirstSpace
{
class NamespaceClass
{
public void Func() { Console.WriteLine("Inside FirstSpace"); }
}
}
namespace SecondSpace
{
class NamespaceClass // 같은 클래스 이름, 다른 네임스페이스
{
public void Func() { Console.WriteLine("Inside SecondSpace"); }
}
}
class TestClass
{
static void Main(string[] args)
{
FirstSpace.NamespaceClass fc = new FirstSpace.NamespaceClass();
SecondSpace.NamespaceClass sc = new SecondSpace.NamespaceClass();
fc.Func(); // Inside FirstSpace
sc.Func(); // Inside SecondSpace
Console.ReadKey();
}
}
using 키워드
using 키워드는 프로그램이 지정된 네임스페이스의 이름을 사용함을 알립니다. 예를 들어 System 네임스페이스의 Console 클래스를 쓸 때:
Console.WriteLine("Hello there"); // using System; 덕분
완전 한정 이름을 써도 됩니다.
System.Console.WriteLine("Hello there");
using 지시문으로 네임스페이스 생략
using System;
using FirstSpace;
using SecondSpace;
namespace FirstSpace
{
class Abc { public void Func() { Console.WriteLine("Inside FirstSpace"); } }
}
namespace SecondSpace
{
class Efg { public void Func() { Console.WriteLine("Inside SecondSpace"); } }
}
class TestClass
{
static void Main(string[] args)
{
Abc fc = new Abc(); // FirstSpace.Abc
Efg sc = new Efg(); // SecondSpace.Efg
fc.Func();
sc.Func();
Console.ReadKey();
}
}
중첩 네임스페이스 (Nested Namespaces)
네임스페이스 안에 다른 네임스페이스를 정의할 수 있습니다.
namespace Namespace1
{
// 코드 선언
namespace Namespace2
{
// 코드 선언
}
}
점(.) 연산자로 중첩 네임스페이스 멤버에 접근합니다.
중첩 네임스페이스 예제
using System;
using FirstSpace;
using FirstSpace.SecondSpace;
namespace FirstSpace
{
class Abc { public void Func() { Console.WriteLine("Inside FirstSpace"); } }
namespace SecondSpace
{
class Efg { public void Func() { Console.WriteLine("Inside SecondSpace"); } }
}
}
class TestClass
{
static void Main(string[] args)
{
Abc fc = new Abc();
Efg sc = new Efg();
fc.Func(); // Inside FirstSpace
sc.Func(); // Inside SecondSpace
Console.ReadKey();
}
}
네임스페이스 별칭 (Namespace Alias)
긴 네임스페이스 이름이나 충돌하는 이름을 짧게 별칭으로 쓸 수 있습니다.
using ProjectA = MyCompany.Projects.ProjectA;
using ProjectB = MyCompany.Projects.ProjectB;
// 사용
ProjectA.ClassName objA = new ProjectA.ClassName();
ProjectB.ClassName objB = new ProjectB.ClassName();
전역 네임스페이스 (Global Namespace)
global:: 접두사로 전역 네임스페이스를 명시적으로 참조합니다.
global::System.Console.WriteLine("전역 System 네임스페이스");
모범 사례
- 회사/프로젝트명으로 최상위 네임스페이스 시작:
CompanyName.ProjectName
- 기능별로 논리적 그룹화:
MyApp.Data, MyApp.Services, MyApp.UI
- 파일 폴더 구조와 네임스페이스 일치시키기
using 지시문은 파일 최상단에 정리
- 불필요한
using 제거 (IDE 기능 활용)
핵심: 네임스페이스는 물리적 파일 구조가 아닌 논리적 코드 조직화 도구입니다. 이름 충돌 방지와 코드 탐색성 향상이 주 목적입니다.