Foundry에서 오브젝트의 정체성은 몇 가지 다른 방식으로 표현되며, 이러한 다양한 표현을 이해하는 것은 Functions에서 올바른 코드를 작성하는 데 중요할 수 있습니다. 이 섹션에서는 오브젝트가 어떻게 식별되는지와 코드에 대한 영향을 설명합니다.
"RID"는 Resource Identifier를 나타냅니다. 이것은 Palantir의 오픈 소스 명세로, 엔티티를 식별하는 데 사용됩니다. 온톨로지 오브젝트는 백업 데이터셋을 색인화하거나 액션의 일부로 생성될 때 RID가 할당됩니다.
Functions에서 모든 온톨로지 오브젝트에는 string | undefined
형식의 rid
필드가 있습니다. RID가 정의되지 않은 이유는 Functions에서 오브젝트 생성 API를 사용하여 새 오브젝트를 생성할 수 있기 때문입니다. 새로 생성된 오브젝트는 항상 rid
값이 undefined
이고, 기존 오브젝트는 항상 정의된 rid
를 가지고 있습니다.
오브젝트는 오브젝트 유형과 기본 키에 의해 고유하게 식별될 수도 있습니다. 기본 키는 고유한 propertyId
와 값 쌍입니다. 예를 들어, Employee 오브젝트 유형은 employeeId
라는 스트링
속성으로 고유하게 식별될 수 있습니다.
모든 온톨로지 오브젝트에는 항상 존재하는 typeId
와 primaryKey
필드가 있습니다. 이는 새 오브젝트를 생성할 때 기본 키를 제공해야 하기 때문입니다.
Functions 내에서 각 온톨로지 오브젝트는 JavaScript 오브젝트를 사용하여 표현됩니다. 하나의 온톨로지 오브젝트가 여러 개의 JavaScript 오브젝트로 표현될 수 있습니다. 예를 들어, 오브젝트 검색에서 온톨로지 오브젝트를 여러 번 로드하거나, 오브젝트 검색에서 오브젝트를 로드하고 매개변수로 전달된 것 외에도 이를 로드하는 경우에 이런 현상이 발생할 수 있습니다:
Copied!1 2 3 4 5 6 7 8 9
public myFunction(employee: Employee): void { // 객체에서 직원을 찾아서 employee2 변수에 할당합니다. const employee2 = Objects.search().employee() .filter(e => e.id.exactMatch(employee.id)) // employee의 ID와 일치하는 직원을 필터링합니다. .all()[0]; console.log(employee == employee2); // false (두 직원 객체가 값은 같지만 서로 다른 참조를 가지므로 false) console.log(employee === employee2); // false (두 직원 객체가 값은 같지만 서로 다른 참조를 가지므로 false) console.log(employee.id === employee2.id); // true (두 직원의 ID는 같습니다) }
위 예제에서 employee
와 employee2
는 동일한 개념적 온톨로지 오브젝트를 참조하지만, ==
및 ===
연산자를 사용하여 비교하면 두 변수가 서로 다른 자바스크립트 오브젝트를 참조하기 때문에 false
가 반환됩니다. rid
필드를 비교하는 것은 새로 생성된 오브젝트의 rid
가 undefined
이기 때문에 문제가 될 수 있습니다.
결과적으로, 두 온톨로지 오브젝트를 동일성을 비교하는 가장 좋은 방법은 typeId
와 primaryKey
를 비교하는 것입니다:
Copied!1 2 3 4 5 6
// OntologyObject 두 개를 비교하여 같은지 확인하는 함수 function isEqual(o1: OntologyObject, o2: OntologyObject) { // 두 객체의 typeId가 같고 primaryKey 값도 같으면 true를 반환 return o1.typeId === o2.typeId && JSON.stringify(o1.primaryKey) == JSON.stringify(o2.primaryKey); }
오브젝트에서 일부 값으로의 매핑을 저장하는 것은 종종 유용할 수 있습니다. 예를 들어, 오브젝트 배열을 반복하고 보다 효율적인 조회를 위해 값들을 저장하려는 경우가 이에 해당합니다.
위에서 설명한 동일성 체크 문제로 인해, 각 오브젝트에 대한 값을 저장하기 위해 단순히 자바스크립트 Map을 사용할 수 없습니다. 대신, OntologyObjects를 키로 지원하도록 특별히 설계된 FunctionsMap을 사용할 수 있습니다.