이번에 더 배울 것
공유 속성(shared property)은 여러 객체 타입에서 함께 쓰는 속성입니다. 문서에 따르면 속성 메타데이터(이름, 설명, 형식 등)는 공유되지만 객체 데이터는 공유되지 않습니다. Employee와 Contractor가 모두 ‘시작일’을 가진다면 공유 속성 하나로 두 타입의 메타데이터를 한 곳에서 고칠 수 있습니다. 기존 속성을 공유 속성으로 바꿀 수도 있고, 화면에서는 이름 옆에 지구본 아이콘으로 표시됩니다.
인터페이스(Interface)는 메타데이터만이 아니라 형태와 기능을 묶습니다. 인터페이스 속성(인터페이스에 직접 정의하는 방식이 권장되며 공유 속성을 쓸 수도 있음), 링크 타입 제약, 액션 타입 제약으로 이루어지고, 객체 타입은 필수 속성·링크·액션을 매핑해 구현합니다. 워크플로와 코드가 인터페이스를 대상으로 하면, 새 객체 타입이 그 인터페이스를 구현하는 것만으로 코드 수정 없이 같은 기능에 들어옵니다.
팔란티어의 온톨로지 설계 지침은 넓고 값이 대부분 비어 있는 객체 타입 대신 인터페이스로 추상화하고, 깊은 단일 상속 대신 조합을 쓰라고 권합니다. Inspectable·Schedulable처럼 기능이나 역할 단위의 작은 인터페이스, MilitaryAsset처럼 분류 단위의 인터페이스를 예로 들고, 같은 것을 세 번 만들었다면 리팩터링하라는 ‘세 번의 규칙’을 제시합니다. 다만 인터페이스 지원 범위는 앱마다 다르고, 인터페이스에 모든 것을 담으면 다시 거대한 타입이 된다는 점을 경계해야 합니다.
작은 예제로 따라가기
Shipment, Return, Pallet가 모두 trackingNumber, currentLocation, lastScanAt을 가집니다.
공유 속성만 쓰면 세 타입이 같은 이름과 설명을 쓰지만, ‘24시간 미스캔 목록’ 화면과 ‘스캔 기록’ 액션은 여전히 타입마다 따로 만들어야 합니다.
Trackable 인터페이스(세 속성과 ‘스캔 기록’ 액션 제약)를 세 타입이 구현하면 화면과 액션 하나가 세 타입을 함께 처리하고, 나중에 Container가 추가돼도 구현만 하면 됩니다.
공유 속성이면 충분할까
각 상황에서 공유 속성과 인터페이스 중 무엇이 알맞을지 먼저 고르세요.
필요한 것은 메타데이터의 일관성뿐이고, 두 타입을 한 워크플로로 묶을 일은 없습니다.
학습을 시작하면 새 문제를 직접 풀고 확인 퀴즈를 마친 뒤 선택한 본과정 회차로 돌아갑니다.