F.R.I.D.A.Y.

C# - namespace(네임스페이스) 본문

DEV/.Net

C# - namespace(네임스페이스)

F.R.I.D.A.Y. 2021. 5. 28. 17:05
반응형

 지역을 정해주는 개념으로, 혹은 이름 중복을 해결하기 위한 수단으로 보면 될 것 같다


이름 중복

 프로그램 규모가 커지면 커질수록 소스코드에서 변수를 사용하는 규모도 함께 커진다. 단순히 변수의 규모만 커지는 것도 아니고 함수, 클래스 등 온갖 내용이 함께 나오니 점점 프로그램에서 사용할 수 있는 이름도 줄어들게 된다.[# 이미 사용된 이름은 사용할 수가 없으니까] 이 문제를 해결하기 위해선 각각의 이름을 구분지을 수 있는 방법이 있어야 한다.

 

 여러 식당에서 같은 메뉴를 판매 하더라도 식당 이름이 다르면 사람들이 구분을 지을 수 있듯이, C#에서도 구분을 짓는데 도움이 되는 문법이 있다. 이름하여 namespace(네임스페이스)다.

 

네임스페이스

 네임스페이스는 당장에 콘솔 프로그램을 작성할 때도 나오는데, 처음 프로젝트를 생성하면 프로젝트 이름을 기반으로 한 네임스페이스 안에 코드가 구성된다.

 

 나중에 배우겠지만 클래스는 네임스페이스 바깥에서도 정의가 가능하다. 그러나 대부분의 경우에선 네임스페이스 안에 정의를 한다.

 

필요성

 네임스페이스는 필수 불가결한 존재다. 만일 다른 개발자가 만든 라이브러리를 사용하려고 하는데 내 코드와 이름이 겹치는 변수, 혹은 함수가 존재해서 충돌이 일어난다면 그것은 그것대로 난감한 일이 될 것이다. 이 문제는 네임스페이스로 대상을 묶음으로서 해결할 수 있다.

namespace A{
	class test{
    
    }
}

namespace B{
	class test{
    
    }
}

 해당 코드는 class test가 중복 선언되어 있지만 서로 다른 네임스페이스 영역에 존재하기 때문에 충돌없이 사용이 가능하다. 각각의 클래스가 서로 다른 기능을 수행하더라도 이는 네임스페이스를 기반으로 구분을 할 수 있기 때문에 문제가 되지 않는다.

 

작성

 네임스페이스는 계층으로 만들 수 있다. 즉, 아래처럼 만들 수 있다는 소리가 된다.

namespace A{
	namespace B{
    	class Test{
        
        }
    }
}

 Test에 접근하기 위해선 A.B.Test가 되는 것이다. 물론, 이렇게 계층을 하나하나 만들 필요는 없고, 컴마(.)를 통해 한 번에 만들 수도 있다.

namespace A.B{
	class Test{
    
    }
}

 

 

사용

 네임스페이스는 범위를 한정짓는데 큰 도움이 되지만 이름의 길이가 길어지면 코드 작성에 불편을 겪을 수도 있다. 당장에 콘솔창에 텍스트 출력을 하는 함수도 사용을 하려면 아래처럼 작성해야한다.

System.Console.Write();
System.Console.WriteLine();

 이런 불편을 줄이기 위해 using이란 키워드를 사용할 수 있다.

using System.Console;

 

 코드 상단에 위와 같이 작성을 하게 되면, 기본적으로 네임스페이스가 System.Console인 내부 함수들을 작성할 때 해당 네임스페이스를 작성하지 않고도 사용할 수 있다.

Write();
WriteLine();

 

주의할 점

 using을 사용해 제거할 수 있도록 구성한 경우 주의할 점이 있다.

using A;
using B;

namespace A{
	class Test{
    
    }
}

namespace B{
	class Test{
    
    }
}

 

 이와 같은 코드에서 Test라고만 작성을 하게 되면 A.Test가 호출이 될까 B.Test가 호출이 될까? 정답은 syntax 에러를 일으킨다. 컴파일 할 때 Test를 호출하면 A.Test를 호출해야할지 B.Test를 호출해야할지 모호하기 때문이다. 때문에 이런 경우엔 A.Test나 B.Test라고 명시적으로 호출을 해주면 문제가 해결된다. 다른 많은 부분들이 겹치지 않는데 단 하나의 대상이 겹쳐서 using을 사용하지 않고 계속 네임스페이스를 작성하면 불편이 이만저만이 아닐테니 말이다. using을 사용했다고 무조건 네임스페이스를 제거하고 작성해야하는 것은 아니라는 것을 명심하자.

 

# index

728x90
반응형

'DEV > .Net' 카테고리의 다른 글

C# - 메서드에 대해서  (0) 2021.05.29
C# - 구조체와 클래스  (0) 2021.05.28
C# - 예외 처리  (0) 2021.05.27
C# - 반복문  (0) 2021.05.27
C# - 조건문  (0) 2021.05.27
Comments