단일 시그니처 모듈

단일 시그니처 모듈 (Single-Signature Modules)

racket/signature 언어가 모듈 본문을 단위 시그니처(unit signature)로 다루는 방식을 살펴볼게요. 이 언어는 모듈 전체가 하나의 시그니처가 되어 다른 단위와 연결될 수 있게 해줘요.

출처: Racket Reference

본문

#lang racket/signature  |  package: base

racket/signature 언어는 모듈 본문을 racket/unit이 모듈 본문을 단위(unit) 본문으로 다루듯이, 단위 시그니처로 다뤄요. 즉 racket/signatureracket/base의 모든 바인딩을 %#module-begin만 빼고 제공(provide)해요.

본문은 다음 모듈 본문 문법과 일치해야 해요:

module-body = (require require-spec ...) ... sig-elem ...

sig-elem의 문법은 define-signature를 참고하세요. racket/unit 모듈의 본문과 달리, racket/signature 모듈 안의 require는 리터럴한 require 사용이어야 해요.

결과로 만들어지는 시그니처는 base^라는 이름으로 내보내져요. 여기서 base는 둘러싸는 모듈의 이름(즉 그 상징적 이름, 혹은 디렉터리와 파일 접미사를 뺀 경로)에서 유도돼요. 모듈 이름이 -sig로 끝나면 base-sig 앞부분의 모듈 이름이 되고, 그렇지 않으면 모듈 이름 자체가 base가 돼요.

sig-elem으로 쓰인 struct 폼은 define-struct가 도입하는 정의와 일관돼요. 이는 struct가 도입하는 정의와는 다른데, (원래는 버그였지만 호환성을 위해 보존된 동작이에요.)

더 알아보기