Skip to main content

Opaque data types

내부 표현이 드러나는 데이터 타입을 투명 타입이라고 합니다. 이러한 타입은 데이터의 내부 구조를 노출하므로 해당 데이터에 대한 연산을 직접 이해할 수 있습니다.

투명 데이터 타입의 단점은 타입 시스템의 안전성이 낮아진다는 것입니다. 변수에 잘못된 타입을 할당하는 등의 타입 오류를 방지하기 어려워질 수 있습니다.

불투명 데이터 타입은 실제 데이터 구조를 숨기고 인터페이스만 제공합니다. 내부 구조에 접근할 수 있는 서브루틴을 통해서만 조작할 수 있습니다.

정보 은닉 원칙, 즉 설계 결정과 구현을 분리하면 코드의 탄력성이 높아집니다. 내부 세부 사항에 의존하지 않으므로 구현을 자유롭게 개선하거나 변경할 수 있으며, 변경 가능성이 높은 부분을 방어적으로 코딩하면 전체적으로 더 견고한 코드가 됩니다.

Midnight opaque data types

Compact의 불투명 타입은 외부 JavaScript 데이터를 DApp 대신 저장, 전달, 검색할 수 있게 해주는 타입 시스템 기능입니다. 다만 Compact 코드 내에서는 해당 데이터를 검사할 수 없습니다.

Midnight의 Compact 언어는 현재 Opaque<'string'>Opaque<'Uint8Array'>를 지원하며, 컨트랙트의 공개 상태에 저장할 수 있습니다.

참고: 불투명성은 Compact 내에서만 적용됩니다. DApp의 JavaScript 코드에서는 투명하게 접근할 수 있습니다. 온체인 표현은 숨겨지지 않습니다 - Uint8Array는 바이트 배열로, string은 UTF-8 인코딩으로 표현됩니다.

Examples

개발자 튜토리얼의 게시판 예제 DApp에서 불투명 데이터 타입의 사용 예를 확인할 수 있습니다.

  • Compact의 post circuit는 DApp에서 호출하여 Opaque<'string'>을 전달받는 컨트랙트 진입점입니다. Compact 코드는 이 값의 내부를 볼 수 없지만, 컨트랙트의 공개 상태에 저장합니다.

  • 이후 Compact의 take_down circuit가 이 값을 읽어 JavaScript 또는 TypeScript 호출자에게 반환합니다.