인터페이스
인터페이스는 계약에 의한 설계(design by contract)라는 개념에 기반합니다. 소프트웨어 설계에서 계약이란 코드 단위가 어떻게 동작해야 하는지를 정의한 명세입니다.
구체적으로 말하면, 인터페이스는 타입 정의와 함수 선언의 모음입니다. 개념적으로 인터페이스는 컴포넌트가 서로 상호 작용하거나 호스트와 상호 작용할 수 있게 하는, 단일한 목적을 가지며 합성 가능한 계약을 기술합니다.
- 단일 목적: 관례적으로 인터페이스는 서로 관련되어 있으며 함께 비교적 작은 기능 단위를 제공하는 타입과 함수를 기술합니다. 예를 들어 명령줄 환경에서 표준 입력 스트림으로부터 읽는 기능이 이에 해당합니다.
- 합성 가능: 인터페이스는 임포트하고 익스포트할 수 있습니다. 한 컴포넌트의 인터페이스는 다른 컴포넌트에 정의된 인터페이스를 기반으로 구축할 수 있습니다. 인터페이스는 타입 검사를 가능하게 하므로, 합성이 타당한 경우에만 인터페이스를 합성할 수 있습니다.
인터페이스의 타입과 함수는 컴포넌트와 호스트 간의 상호 작용을 가능하게 하는 데 사용됩니다. 예를 들면 다음과 같습니다.
- “HTTP 요청 수신” 인터페이스는 들어오는 요청, 나가는 응답, HTTP 메서드와 헤더 및 기타 데이터 구조를 나타내는 타입의 정의와 함께 “요청 처리” 함수 하나를 선언할 수 있습니다. 이는 wasi-http의
incoming-handler인터페이스와 비슷한 모습일 수 있습니다 - “벽시계(wall clock)” 인터페이스는 두 개의 함수를 선언할 수 있습니다. 하나는 현재 시각을 가져오는 함수이고, 다른 하나는 타이머의 정밀도(시간을 초, 밀리초, 나노초 또는 다른 단위 중 무엇으로 측정하는지)를 가져오는 함수입니다. 또한 특정 시점을 나타내는 타입도 정의할 것입니다. 이는 wasi-clocks의
wall-clock인터페이스와 비슷한 모습일 수 있습니다.
인터페이스를 서로 합성하는 예로, 두 개의 함수를 선언하는 “타이머” 인터페이스를 정의한다고 가정해 보십시오. 하나는 타이머를 시작하는 함수이고, 다른 하나는 제한 시간이 초과되었는지 조회하는 함수입니다. 이 인터페이스는 “벽시계” 인터페이스를 임포트하여 정의할 수 있습니다. 그 결과는 타이머 기능을 익스포트하고, “벽시계” 인터페이스가 임포트하는 모든 것을 임포트하는 인터페이스입니다.
인터페이스는 WIT 언어를 사용하여 정의합니다.
인터페이스에 대한 보다 형식적인 정의는 WIT 명세를 참고하십시오.