3.5.2 구조적 서브타이핑(Structural Subtyping)

3.5.2 구조적 서브타이핑(Structural Subtyping)

정의: 구조적 서브타이핑(Structural Subtyping) — 구조적 서브타이핑은 동일한 구조를 가진 타입 사이의 암시적 관계를 정의합니다.

Haxe에서 구조적 서브타이핑은 다음을 유니파이할 때 허용됩니다:

다음 예제는 Haxe 표준 라이브러리Lambda 클래스의 일부예요:

public static function empty<T>(it : Iterable<T>):Bool {
  return !it.iterator().hasNext();
}

empty 메서드는 Iterable에 요소가 있는지 확인해요. 이를 위해 인자 타입에 대해 알 필요는 없고, 단지 그 타입이 iterable로 간주된다는 것만 알면 됩니다. 따라서 Iterable<T>와 유니파이되는 어떤 타입이든 empty 메서드를 호출할 수 있는데, Haxe 표준 라이브러리의 많은 타입이 그렇습니다.

이런 종류의 타이핑은 매우 편리할 수 있지만, 과도하게 사용하면 정적 대상에서 성능에 해로울 수 있어요. 성능에 미치는 영향(Impact on Performance)에 상세히 나와 있습니다.

출처: Structural Subtyping

본문

구조적 서브타이핑의 정의

구조적 서브타이핑은 동일한 구조(필드 집합)를 가진 타입 사이에 암시적 관계를 만들어요. 명시적인 선언 없이도 구조가 호환되면 호환 타입으로 취급됩니다.

허용되는 유니피케이션

클래스와 구조체, 구조체와 구조체 사이의 유니피케이션이 허용돼요. 예제의 empty<T>(it:Iterable<T>)Iterable과 호환되는 어떤 타입이든 받을 수 있어요.

편리함과 성능 트레이드오프

구조적 서브타이핑은 매우 편리하지만, 정적 대상에서 과도하게 쓰면 성능이 저하될 수 있어요. 성능 중요 코드에서는 사용을 신중히 해야 합니다.

더 알아보기