네임스페이스는 관련된 코드를 묶고 이름 충돌을 피하는 방법이며, 아주 사소한 코드베이스를 제외하면 거의 모든 코드에 존재해요.
문법은 다음과 같아요:
namespace MyNameSpace
{
public class MyClass {}
public class OtherClass {}
}
네임스페이스 안에 있는 타입을 네임스페이스 범위 밖에서 참조할 때는 타입 이름 앞에 점 문법을 붙여요. 또는 더 흔하게는 파일 맨 위(또는 네임스페이스 안)에 using 지시문을 두면 접두사 없이 타입을 사용할 수 있어요. 같은 네임스페이스 안에서는 타입 이름을 한정할 필요가 없어요.
namespace MySpace
{
public class MyClass {}
public class Foo
{
public void Bar()
{
var baz = new MyClass();
}
}
}
public class Qux
{
public void Box()
{
var nux = new MySpace.MyClass();
}
}
namespace OtherSpace
{
using MySpace;
public class Tix
{
public void Jeg()
{
var lor = new MyClass();
}
}
}
using MyAlias = MySpace; 문법으로 네임스페이스에 별칭을 붙일 수 있고, 그러면 네임스페이스를 사용할 수 있는 어디서든 그 별칭을 사용할 수 있어요.
경영진이 원격 조종 자동차 프로젝트 remote-control-competition에 다윈주의 원칙을 적용하기 시작했어요. 개발자들은 _Red_와 Blue 두 팀으로 나뉘었고, 서로 독립적으로 설계를 개선하는 임무를 맡았어요. 다른 팀의 설계 결정에는 신경 쓸 필요가 없어요.
코드를 살펴보고, 테스트를 위해 두 팀의 작업을 가장 잘 합칠 방법을 찾아 달라는 요청을 받았어요.
코드의 의도를 더 잘 드러낼 수 있도록 namespaces를 사용해 봐요.
현재 Motor와 Telemetry 같은 중요한 타입은 물론 RemoteControlCar 자체도 <Color>RemoteControlCarTeam이라는 바깥쪽 정적 클래스 안에 중첩되어 있어요. 바깥쪽 클래스의 유일한 목적은 같은 이름의 타입들이 프로그램 안에서 함께 존재할 수 있게 하는 것이에요. 이는 네임스페이스를 사용하면 더 잘 표현할 수 있어요. 다음 연습 문제에서 이런 목적에서는 namespace가 static class보다 유리하다는 것을 알게 될 거예요.
경영진은 정의에서는 팀을 RedRemoteControlCarTeam과 BlueRemoteControlCarTeam이라고 불러야 한다고 강하게 주장하지만, 팀을 참조할 때 이 이름은 다소 번거로워요. 자동차를 만들 때 더 짧은 식별자인 Red와 Blue를 사용할 방법을 찾아봐요.
Exercism에 가입하고 C# 트랙을 개념 62개연습 문제 178개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.