NamespaceOperation

NamespaceOperation (네임스페이스 연산)

객체의 적어도 하나 이상의 Namespace에서 동작하는 연산을 기술합니다. 예를 들어 프로퍼티 게터는 GET:PROPERTY 형태로 표현돼요.

출처: Java API Reference

본문

예를 들어 프로퍼티 게터는 이렇게 표현됩니다.

Operation propertyGetter = new NamespaceOperation(
    StandardOperation.GET,
    StandardNamespace.PROPERTY);

그리고 "color"라는 이름의 프로퍼티 게터는 NamedOperation과 결합해 표현할 수 있어요.

Operation colorPropertyGetter = new NamedOperation(
    new NamespaceOperation(
        StandardOperation.GET,
        StandardNamespace.PROPERTY),
    "color");

직접 만들 수도 있지만 Operation.withNamespace(Namespace)Operation.withNamespaces(Namespace...) 팩토리 메서드를 쓰는 편이 편리합니다.

Operation getElementOrPropertyEmpty =
    StandardOperation.GET
        .withNamespace(StandardNamespace.PROPERTY)
        .named("color");

네임스페이스가 여럿 지정되면 서로 우선순위 순서의 대안으로 취급되며, 연산의 의미는 '첫 번째로 적용 가능한 것'이 됩니다. 즉 GET:PROPERTY|ELEMENT:color는 객체에서 "color" 프로퍼티를 가져오되, 프로퍼티가 없다면 인덱스 "color"의 컬렉션 요소를 가져오라는 뜻이에요.

이런 복수 네임스페이스 연산은 네임스페이스를 구분하지 않는 언어를 구현하거나, 일반 객체이자 컬렉션으로 볼 수 있는 객체(예: 자바 Map)에 대한 연산을 표현할 때 유용합니다. GET:PROPERTY|ELEMENT:empty는 자바 맵에서 항상 Map.isEmpty() 프로퍼티와 일치하지만, GET:ELEMENT|PROPERTY:empty는 맵에 "empty" 키가 있으면 실제 맵 요소에 일치하고 키가 없을 때만 isEmpty() 게터로 폴백해요.

언어가 일부 네임스페이스를 구분하지 않더라도, 서로 다른 문법을 서로 다른 네임스페이스 순서에 매핑하면 도움이 됩니다. 예를 들어 obj.colorGET:PROPERTY|ELEMENT|METHOD:color에, 다른 소스 표현은 또 다른 순서에 매핑할 수 있어요.

생성자

  • NamespaceOperation(Operation baseOperation, Namespace... namespaces) — 새 네임스페이스 연산을 만듭니다. 기반 연산과 대상 네임스페이스들을 받아요.

주요 메서드

  • getBaseOperation() — 기반 연산을 반환합니다.
  • getNamespaces() — 대상 네임스페이스 배열을 반환합니다.
  • getNamespaces(NamespaceOperation, Namespace) / getNamespaces(NamespaceOperation, Namespace[]) — 기반 연산을 제외한 네임스페이스만 모아 반환하는 정적 메서드예요.
  • contains(Namespace...) — 지정한 네임스페이스들이 모두 포함되어 있는지 확인합니다.

더 알아보기

Java 공식 API