Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C#의 네임스페이스: 자바 패키지를 대체하는 개념 완벽 이해

자바에서는 패키지(Package)를 사용해 클래스를 체계적으로 관리하지만, C# 언어에서는 이에 해당하는 개념으로 네임스페이스(Namespace)를 제공합니다.

자바의 패키지란?

패키지는 자바에서 다음과 같은 목적으로 사용됩니다.

  • 이름 충돌(naming conflict) 방지
  • 클래스 및 멤버에 대한 접근 제어
  • 클래스, 인터페이스, 열거형(enum), 애노테이션(annotation)을 더 쉽게 검색하고 찾아서 사용할 수 있도록 지원

C#의 네임스페이스란?

네임스페이스는 한 집합의 이름을 다른 집합의 이름과 분리하여 관리할 수 있도록 설계된 기능입니다. 덕분에 서로 다른 네임스페이스에서 같은 이름의 클래스를 선언하더라도 서로 충돌하지 않습니다.

네임스페이스 정의는 namespace 키워드로 시작하며, 그 뒤에 네임스페이스의 이름이 옵니다.

예제 코드

다음 예제는 C#에서 두 개의 네임스페이스를 선언하고, 각 네임스페이스에 동일한 이름의 클래스를 정의한 뒤 문제없이 사용하는 모습을 보여줍니다.

using System;

namespace first_space {
    class namespace_cl {
        public void func() {
            Console.WriteLine("Inside first_space");
        }
    }
}

namespace second_space {
    class namespace_cl {
        public void func() {
            Console.WriteLine("Inside second_space");
        }
    }
}

class TestClass {
    static void Main(string[] args) {
        first_space.namespace_cl fc = new first_space.namespace_cl();
        second_space.namespace_cl sc = new second_space.namespace_cl();

        fc.func();
        sc.func();
        Console.ReadKey();
    }
}

실행 결과

Inside first_space
Inside second_space

코드 설명

first_spacesecond_space라는 두 개의 네임스페이스 안에는 각각 namespace_cl이라는 똑같은 이름의 클래스가 존재합니다. 일반적인 상황이라면 클래스 이름이 중복되어 오류가 발생해야 하지만, 네임스페이스가 서로 다르기 때문에 아무런 충돌 없이 공존할 수 있습니다.

Main 메서드에서는 first_space.namespace_cl, second_space.namespace_cl처럼 네임스페이스 이름을 접두사처럼 붙여 각 클래스를 명확하게 구분하고 있습니다. 실행 결과를 보면 각 네임스페이스에 속한 func() 메서드가 정상적으로 호출되어 각자의 문자열을 출력하는 것을 확인할 수 있습니다.

정리

자바의 패키지와 C#의 네임스페이스는 모두 코드의 논리적 구조를 나누고 이름 충돌을 예방한다는 점에서 유사한 역할을 합니다. C#에서는 namespace 키워드로 이름 공간을 정의하고, 필요할 때 네임스페이스 이름을 함께 명시하거나 using 지시문을 활용해 편리하게 클래스에 접근할 수 있습니다.