G·Graph Daily Lab 전체 140회
추가 30 / 40 · 심화 · 약 15분

공유 속성과 인터페이스 설계

여러 객체 타입에 같은 속성이 반복될 때 공유 속성으로 충분한지, 인터페이스가 필요한지 판단합니다.

팔란티어 온톨로지 I

배운 뒤 돌아올 회차

DAY 74에서 Trackable 인터페이스를 써 봤다면, 그런 인터페이스를 어떤 기준으로 나누고 언제는 공유 속성만으로 충분한지 따져 봅니다.

시작하면 직접 풀기와 퀴즈 기록이 저장됩니다. 본과정 100회 진도와는 별도입니다.

이번에 더 배울 것

공유 속성(shared property)은 여러 객체 타입에서 함께 쓰는 속성입니다. 문서에 따르면 속성 메타데이터(이름, 설명, 형식 등)는 공유되지만 객체 데이터는 공유되지 않습니다. Employee와 Contractor가 모두 ‘시작일’을 가진다면 공유 속성 하나로 두 타입의 메타데이터를 한 곳에서 고칠 수 있습니다. 기존 속성을 공유 속성으로 바꿀 수도 있고, 화면에서는 이름 옆에 지구본 아이콘으로 표시됩니다.

인터페이스(Interface)는 메타데이터만이 아니라 형태와 기능을 묶습니다. 인터페이스 속성(인터페이스에 직접 정의하는 방식이 권장되며 공유 속성을 쓸 수도 있음), 링크 타입 제약, 액션 타입 제약으로 이루어지고, 객체 타입은 필수 속성·링크·액션을 매핑해 구현합니다. 워크플로와 코드가 인터페이스를 대상으로 하면, 새 객체 타입이 그 인터페이스를 구현하는 것만으로 코드 수정 없이 같은 기능에 들어옵니다.

팔란티어의 온톨로지 설계 지침은 넓고 값이 대부분 비어 있는 객체 타입 대신 인터페이스로 추상화하고, 깊은 단일 상속 대신 조합을 쓰라고 권합니다. Inspectable·Schedulable처럼 기능이나 역할 단위의 작은 인터페이스, MilitaryAsset처럼 분류 단위의 인터페이스를 예로 들고, 같은 것을 세 번 만들었다면 리팩터링하라는 ‘세 번의 규칙’을 제시합니다. 다만 인터페이스 지원 범위는 앱마다 다르고, 인터페이스에 모든 것을 담으면 다시 거대한 타입이 된다는 점을 경계해야 합니다.

작은 예제로 따라가기

1

Shipment, Return, Pallet가 모두 trackingNumber, currentLocation, lastScanAt을 가집니다.

2

공유 속성만 쓰면 세 타입이 같은 이름과 설명을 쓰지만, ‘24시간 미스캔 목록’ 화면과 ‘스캔 기록’ 액션은 여전히 타입마다 따로 만들어야 합니다.

3

Trackable 인터페이스(세 속성과 ‘스캔 기록’ 액션 제약)를 세 타입이 구현하면 화면과 액션 하나가 세 타입을 함께 처리하고, 나중에 Container가 추가돼도 구현만 하면 됩니다.

COMPARE & EXPLAIN

공유 속성이면 충분할까

각 상황에서 공유 속성과 인터페이스 중 무엇이 알맞을지 먼저 고르세요.

공유 속성

필요한 것은 메타데이터의 일관성뿐이고, 두 타입을 한 워크플로로 묶을 일은 없습니다.

메타데이터의 일관성만 필요하면 공유 속성, 여러 객체 타입을 하나의 워크플로로 다뤄야 하면 기능 단위의 작은 인터페이스를 조합합니다.

학습을 시작하면 새 문제를 직접 풀고 확인 퀴즈를 마친 뒤 선택한 본과정 회차로 돌아갑니다.