서브타이핑

프로그래밍 언어 이론에서 서브타이핑은 유형 다형성의 한 형태이다. 서브타입(subtype)은 대체 가능성 개념에 의해 다른 데이터 유형(수퍼 유형)과 관련된 데이터 유형이다. 즉, 상위 유형의 요소에서 작동하도록 작성된 프로그램 요소(일반적으로 서브루틴 또는 함수)가 서브타입의 요소에서도 작동할 수 있다는 의미이다.

S가 T의 서브타입인 경우 서브타이핑 관계(S <: T, S ⊑ T[1] 또는 S ≤: T로 작성됨)는 유형 S의 모든 용어가 유형 T의 용어가 다음과 같은 모든 컨텍스트에서 안전하게 사용될 수 있음을 의미한다. 예상되는. 여기서 서브타이핑의 정확한 의미는 주어진 유형 형식 또는 프로그래밍 언어에 의해 "안전하게 사용됨" 및 "모든 컨텍스트"가 어떻게 정의되는지에 따라 결정적으로 달라진다. 프로그래밍 언어의 유형 시스템은 본질적으로 자체 서브타이핑 관계를 정의한다. 이는 언어가 변환 메커니즘을 전혀(또는 거의) 지원하지 않는 경우 사소할 수 있다.

서브타이핑 관계로 인해 용어는 둘 이상의 유형에 속할 수 있다. 따라서 서브타이핑은 유형 다형성의 한 형태이다. 객체 지향 프로그래밍에서 '다형성'이라는 용어는 일반적으로 이러한 서브타입 다형성만을 지칭하는 데 사용되는 반면, 매개변수 다형성 기술은 일반 프로그래밍으로 간주된다.

함수형 프로그래밍 언어에서는 종종 레코드의 서브타이핑이 허용된다. 결과적으로, 레코드 유형으로 확장된 단순히 유형화된 람다 계산은 아마도 서브타이핑의 유용한 개념을 정의하고 연구할 수 있는 가장 간단한 이론적 설정일 것이다.[2] 결과 계산에서는 용어가 두 개 이상의 유형을 가질 수 있으므로 더 이상 "단순" 유형 이론이 아니다. 함수형 프로그래밍 언어는 정의에 따라 레코드에도 저장될 수 있는 함수 리터럴을 지원하므로 서브타이핑이 있는 레코드 유형은 객체 지향 프로그래밍의 일부 기능을 제공한다. 일반적으로 함수형 프로그래밍 언어는 일반적으로 제한된 형태의 파라메트릭 다형성도 제공한다. 이론적 설정에서는 두 기능의 상호 작용을 연구하는 것이 바람직하다. 일반적인 이론적 설정은 시스템 F<:이다. 객체 지향 프로그래밍의 이론적 특성을 포착하려는 다양한 계산은 시스템 F<:에서 파생될 수 있다.

서브타이핑의 개념은 하위형(hyponymy) 및 신성형(holonymy)이라는 언어적 개념과 관련된다. 이는 수학적 논리의 제한된 수량화 개념과도 관련이 있다. 서브타이핑을 객체 지향 언어의 (클래스 또는 객체) 상속 개념과 혼동해서는 안 된다. 서브타이핑은 유형(객체 지향 용어로 인터페이스) 간의 관계인 반면 상속은 기존 객체에서 새 객체를 생성할 수 있도록 하는 언어 기능에서 비롯된 구현 간의 관계이다. 여러 객체 지향 언어에서 서브타이핑을 인터페이스 상속(interface inheritance)이라고 하며 상속을 구현 상속(implementation inheritance)이라고 한다.

같이 보기

각주

  1. Copestake, Ann. Implementing typed feature structure grammars. Vol. 110. Stanford: CSLI publications, 2002.
  2. Cardelli, Luca. A semantics of multiple inheritance. In G. Kahn, D. MacQueen, and G. Plotkin, editors, Semantics of Data Types, volume 173 of Lecture Notes in Computer Science, pages 51–67. Springer-Verlag, 1984. Full version in Information and Computation, 76(2/3):138–164, 1988.