NamespaceOperation
NamespaceOperation (네임스페이스 연산)
객체의 적어도 하나 이상의 Namespace에서 동작하는 연산을 기술합니다. 예를 들어 프로퍼티 게터는 GET:PROPERTY 형태로 표현돼요.
본문
예를 들어 프로퍼티 게터는 이렇게 표현됩니다.
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.color를 GET:PROPERTY|ELEMENT|METHOD:color에, 다른 소스 표현은 또 다른 순서에 매핑할 수 있어요.
생성자
NamespaceOperation(Operation baseOperation, Namespace... namespaces)— 새 네임스페이스 연산을 만듭니다. 기반 연산과 대상 네임스페이스들을 받아요.
주요 메서드
getBaseOperation()— 기반 연산을 반환합니다.getNamespaces()— 대상 네임스페이스 배열을 반환합니다.getNamespaces(NamespaceOperation, Namespace)/getNamespaces(NamespaceOperation, Namespace[])— 기반 연산을 제외한 네임스페이스만 모아 반환하는 정적 메서드예요.contains(Namespace...)— 지정한 네임스페이스들이 모두 포함되어 있는지 확인합니다.