C#에서 네임스페이스 안에 또 다른 네임스페이스를 선언하는 것을 중첩된 네임스페이스(Nested Namespace)라고 합니다. 이는 주로 코드를 논리적으로 구조화하고, 관련된 클래스들을 계층적으로 관리하기 위해 사용됩니다.
중첩된 네임스페이스의 기본 구조
먼저 외부(Outer) 네임스페이스는 다음과 같이 선언합니다.
namespace outer {}그리고 그 내부에 내부(Inner) 네임스페이스를 선언할 수 있습니다.
namespace inner {
public class innerClass {
public void display() {
Console.WriteLine("Inner Namespace");
}
}
}내부 네임스페이스의 클래스 메서드를 호출하려면 해당 클래스의 객체를 생성한 후, 아래 예제처럼 메서드를 호출하면 됩니다.
중첩된 네임스페이스 전체 예제 코드
using System;
namespace outer {
class Program {
static void Main(string[] args) {
innerClass cls = new innerClass();
Console.WriteLine("Welcome!");
Program.display();
cls.display();
Console.ReadLine();
}
public static void display() {
Console.WriteLine("Outer Namespace");
}
}
namespace inner {
public class innerClass {
public void display() {
Console.WriteLine("Inner Namespace");
}
}
}
}실행 결과
Welcome! Outer Namespace Inner Namespace
코드 설명
outer네임스페이스 안에inner네임스페이스가 중첩되어 있습니다.Program.display()는 외부 네임스페이스의 정적(static) 메서드를 호출하여 "Outer Namespace"를 출력합니다.cls.display()는 내부 네임스페이스의innerClass객체를 통해 "Inner Namespace"를 출력합니다.
C# 최신 버전의 간결한 문법
C# 10부터는 파일 범위 네임스페이스(File-scoped namespace)와 함께 점(.) 표기법으로도 중첩된 네임스페이스를 선언할 수 있습니다.
namespace outer.inner {
public class innerClass {
public void display() {
Console.WriteLine("Inner Namespace");
}
}
}이 방식은 코드 들여쓰기를 줄여 가독성을 높일 수 있어 실무에서 자주 활용됩니다.
정리
중첩된 네임스페이스는 대규모 프로젝트에서 코드의 충돌을 방지하고, 관련 기능별로 체계적인 구조를 만들 때 유용합니다. 외부와 내부 네임스페이스의 역할을 명확히 구분하여 사용하면 유지보수성이 크게 향상됩니다.