제약 조건(F#)

이 항목에서는 제네릭 형식이나 함수의 형식 인수에 필요한 요구 사항을 지정하기 위해 제네릭 형식 매개 변수에 적용할 수 있는 제약 조건을 설명합니다.

type-parameter-list when constraint1 [ and constraint2]

설명

제네릭 형식에 사용 가능한 형식을 제한하기 위해 적용할 수 있는 제약 조건에는 여러 가지가 있습니다. 다음 표에서는 그와 같은 제약 조건의 목록을 제공하고 각 제약 조건을 간략하게 설명합니다.

제약 조건

구문

설명

형식 제약 조건

type-parameter :> type

제공된 형식이 지정된 형식 또는 그 파생 형식과 같아야 합니다. 형식이 인터페이스이면 제공된 형식을 통해 인터페이스를 구현해야 합니다.

Null 제약 조건

type-parameter : null

제공된 형식이 null 리터럴을 지원해야 합니다. 여기에는 F# 목록, 튜플, 함수, 클래스, 레코드 및 공용 구조체 형식을 제외한 모든 .NET 개체 형식이 포함됩니다.

명시적 멤버 제약 조건

type-parameter [or ... or type-parameter] : member-signature

제공된 형식 인수 중 적어도 하나 이상의 인수 멤버에 지정된 시그니처가 있어야 합니다. 이 제약 조건은 일반적인 용도로 사용되지는 않습니다.

생성자 제약 조건

type-parameter : ( new : unit -> 'a )

제공된 형식에 기본 생성자가 있어야 합니다.

값 형식 제약 조건

: struct

제공된 형식이 .NET 값 형식이어야 합니다.

참조 형식 제약 조건

: not struct

제공된 형식이 .NET 참조 형식이어야 합니다.

열거형 제약 조건

: enum<underlying-type>

제공된 형식이 지정된 내부 형식을 갖는 열거된 형식이어야 합니다. 이 제약 조건은 일반적인 용도로 사용되지는 않습니다.

대리자 제약 조건

: delegate<tuple-parameter-type, return-type>

제공된 형식이 지정된 인수와 반환 값을 갖는 대리자 형식이어야 합니다. 이 제약 조건은 일반적인 용도로 사용되지는 않습니다.

비교 제약 조건

: comparison

제공된 형식이 비교를 지원해야 합니다.

같음 제약 조건

: equality

제공된 형식이 같음을 지원해야 합니다.

비관리 제약 조건

: unmanaged

제공된 형식이 관리되지 않는 형식이어야 합니다. 관리되지 않는 형식으로는 특정 기본 형식(sbyte, byte, char, nativeint, unativeint, float32, float, int16, uint16, int32, uint32, int64, uint64, decimal), 열거형 형식, nativeptr<_> 또는 모든 해당 필드가 관리되지 않는 형식이며 제네릭이 아닌 구조체가 있습니다.

일반적인 형식에 대해서는 사용할 수 없고 제약 조건 형식에 대해서만 사용할 수 있는 기능이 코드에 포함된 경우 제약 조건을 추가해야 합니다. 예를 들어 클래스 형식을 지정하기 위해 형식 제약 조건을 사용하는 경우 제네릭 함수나 형식에 해당 클래스의 메서드 중 하나를 사용할 수 있습니다.

제약 조건이 없으면 런타임에 형식 매개 변수에 대해 제공될 수 있는 모든 형식과 관련하여 사용자가 의도하는 기능을 사용할 수 있는지 여부를 컴파일러에서 확인할 방법이 없으므로 형식 매개 변수를 명시적으로 작성할 때 제약 조건을 지정해야 할 경우가 있습니다.

F# 코드에서 가장 일반적으로 사용되는 제약 조건은 기본 클래스 또는 인터페이스를 지정하는 형식 제약 조건입니다. 다른 제약 조건은 산술 연산자에 대한 연산자 오버로드를 구현하는 데 사용되는 명시적 멤버 제약 조건 같이 특정 기능을 구현할 목적으로 F# 라이브러리에 사용되는 것이거나 CLR(공용 언어 런타임)을 통해 지원되는 모든 제약 조건 집합을 F#에서도 지원할 목적으로 제공되는 것이 대부분입니다.

형식 유추 프로세스를 진행하는 동안 컴파일러를 통해 일부 제약 조건이 자동으로 유추됩니다. 예를 들어 함수에 + 연산자를 사용하면 컴파일러에서는 식에 사용되는 변수 형식에 대한 명시적 멤버 제약 조건을 유추합니다.

참고 항목

참조

제네릭(F#)

제약 조건(F#)