다음을 통해 공유


정적으로 확인된 형식 매개 변수(F#)

정적으로 확인된 형식 매개 변수는 런타임이 아니라 컴파일 타임에 실제 형식으로 대체되는 형식 매개 변수입니다. 이러한 형식 매개 변수 앞에는 캐럿 기호(^)가 옵니다.

ˆtype-parameter

설명

F# 언어에는 서로 다른 두 가지 종류의 형식 매개 변수가 있습니다. 첫째 종류는 표준 제네릭 형식 매개 변수입니다. 이러한 형식 매개 변수는 'T 또는 'U의 예에서와 같이 아포스트로피(')로 표시됩니다. 이는 다른 .NET Framework 언어의 제네릭 형식 매개 변수에 해당합니다. 둘째 종류는 정적으로 확인된 형식 매개 변수이며, 이는 ^T 또는 ^U의 예에서와 같이 캐럿 기호로 표시됩니다.

정적으로 확인된 형식 매개 변수는 주로 멤버 제약 조건과 함께 유용하게 사용됩니다. 멤버 제약 조건은 하나 이상의 특정 멤버가 있어야만 형식 인수를 사용할 수 있음을 지정하는 데 사용할 수 있는 제약 조건입니다. 일반적인 제네릭 형식 매개 변수를 사용해서는 이와 같은 종류의 제약 조건을 만들 수 없습니다.

다음 표에서는 두 종류의 형식 매개 변수 사이에 어떤 점이 서로 비슷하거나 다른지 요약하여 설명합니다.

기능

제네릭 형식 매개 변수

정적으로 확인된 형식 매개 변수

구문

'T, 'U

^T, ^U

확인 시간

런타임

컴파일 타임

멤버 제약 조건

멤버 제약 조건과 함께 사용할 수 없습니다.

멤버 제약 조건과 함께 사용할 수 있습니다.

코드 생성

형식(또는 메서드)을 표준 제네릭 형식 매개 변수와 함께 사용하여 단일 제네릭 형식 또는 메서드가 생성됩니다.

필요한 형식마다 하나씩 형식과 메서드의 여러 인스턴스가 생성됩니다.

형식과 함께 사용

형식에 대해 사용할 수 있습니다.

형식에 대해 사용할 수 없습니다.

인라인 함수와 함께 사용

아니요. 표준 제네릭 형식 매개 변수로는 인라인 함수를 매개 변수화할 수 없습니다.

예. 인라인이 아닌 함수나 메서드에는 정적으로 확인된 형식 매개 변수를 사용할 수 없습니다.

F# 핵심 라이브러리 함수 중에는 정적으로 확인된 형식 매개 변수를 가지는 함수가 많으며 특히 연산자가 대표적인 예입니다. 이러한 함수와 연산자는 인라인입니다. 이를 사용하면 숫자 계산을 위한 코드를 효율적으로 생성할 수 있습니다.

연산자를 사용하거나 정적으로 확인된 형식 매개 변수가 있는 기타 함수를 사용하는 인라인 메서드와 함수에서는 정적으로 확인된 형식 매개 변수를 직접 사용할 수도 있습니다. 일반적으로 형식 유추 과정에서는 그와 같은 인라인 함수에 정적으로 확인된 형식 매개 변수가 있는 것으로 유추합니다. 다음 예제에서는 정적으로 확인된 형식 매개 변수가 있는 것으로 유추되는 연산자 정의를 보여 줍니다.

let inline (+@) x y = x + x * y
// Call that uses int.
printfn "%d" (1 +@ 1)
// Call that uses float.
printfn "%f" (1.0 +@ 0.5)

(+@)의 형식을 확인하는 기반으로는 (+) 및 (*)가 둘 다 사용됩니다. 그 결과로 형식 유추 과정에서 정적으로 확인된 형식 매개 변수에 대한 멤버 제약 조건이 유추됩니다. 확인된 형식은 F# 해석기에 다음과 같이 표시됩니다.

^a -> ^c -> ^d
when (^a or ^b) : (static member (+) : ^a * ^b -> ^d) and
     (^a or ^c) : (static member (+) : ^a * ^c -> ^b)

출력은 다음과 같습니다.

2
1.500000

참고 항목

참조

제네릭(F#)

형식 유추(F#)

제약 조건(F#)

개념

인라인 함수(F#)

기타 리소스

자동 일반화(F#)