Namespace
Namespace (네임스페이스)
객체에 대한 동적 연산의 대상이 되는 네임스페이스를 기술하는 인터페이스입니다. 객체는 하나 또는 여러 개의 네임스페이스를 가질 수 있어요.
본문
네임스페이스는 객체의 특정 측면을 가리키는 개념입니다. 예를 들어 프로퍼티, 컬렉션 요소, 메서드 등을 구분하는 대상이죠. Dynalink는 StandardNamespace 열거형으로 표준 네임스페이스 집합을 정의합니다.
자신이 동작할 네임스페이스를 지정해야 하는 연산은 NamespaceOperation으로 표현할 수 있어요. 네임스페이스 개념을 도입하면 같은 객체라도 '프로퍼티로 접근'하는지 '요소로 접근'하는지, '메서드로 접근'하는지를 명확히 구분할 수 있습니다.
구체적으로 보면 네임스페이스는 연산이 어느 '공간'에서 동작할지 정해 주는 역할을 합니다. 같은 GET 연산이라도 PROPERTY 네임스페이스라면 프로퍼티를, ELEMENT 네임스페이스라면 컬렉션 요소를 가져오는 차이가 생겨요. 이처럼 네임스페이스와 연산을 조합하면 객체에 대한 다양한 동작을 구조적으로 표현할 수 있는 것이 특징입니다.
이 인터페이스 자체는 직접 구현보다는 StandardNamespace 열거형을 통해 사용되는 경우가 많습니다. 언어 런타임이 독자적인 네임스페이스를 정의해야 한다면 이 인터페이스를 구현해 확장할 수도 있어요.
예를 들어 특정 언어에만 있는 개념을 네임스페이스로 추가해 그 언어의 객체 모델을 표현할 수 있게 되는 것이죠. 이렇게 하나의 객체에 여러 네임스페이스를 두고, 연산이 그중 어느 쪽을 대상으로 하는지를 구분해 다르게 동작하게 만드는 것이 Dynalink의 네임스페이스 설계의 핵심입니다.
객체 하나가 여러 얼굴을 가졌을 때, 그 얼굴을 구분하는 라벨이 바로 네임스페이스라고 생각하면 이해하기 쉬워요. 프로퍼티 접근과 컬렉션 요소 접근이 같은 이름이라도 서로 다른 네임스페이스라면 충돌 없이 구분됩니다.