다음을 통해 공유


제네릭 메소드 호출에 대하여

제네릭을 사용하면 메서드, 클래스, 구조체 또는 인터페이스를 사용 대상인 정확한 데이터 형식에 맞게 조정할 수 있습니다. 예를 들어 키와 값이 모든 형식일 수 있도록 하는 System.Collections.Hashtable 클래스를 사용하는 대신 System.Collections.Generic.Dictionary 제네릭 클래스를 사용하고 속성에 허용되는 형식을 지정할 수 있습니다. 제네릭은 향상된 코드 재사용성 및 형식 안전성을 제공합니다.

일부 제네릭 메서드의 경우 PowerShell은 제공된 인수에서 유추하여 메서드에 대한 제네릭 인수를 파악할 수 있습니다. 그러나 메서드에 제네릭 오버로드와 제네릭이 아닌 오버로드가 둘 다 있거나 제네릭 메서드가 정식 매개 변수를 사용하지 않는 경우 메서드 확인이 복잡해질 수 있습니다. PowerShell은 명시적 제네릭 메서드 인수 없이 올바른 메서드를 해결하지 못할 수 있습니다.

예들 들어 [array]::Empty[T]()입니다. .NET Array 클래스에는 정식 매개 변수를 사용하지 않는 정적 제네릭 메서드 Empty[T]() 가 있습니다.

PowerShell 7.3 이전에는 적절한 메서드 확인을 위해 .NET 리플렉션을 사용하여 복잡한 해결 방법을 사용해야 했습니다. 예를 들어, Lee Holmes의 블로그 게시물 PowerShell의 제네릭이 아닌 클래스에 대한 제네릭 메서드 호출을 참조하세요.

PowerShell 7.3부터 제네릭 메서드의 형식을 지정할 수 있습니다.

구문

제네릭 메서드는 제네릭 형식 목록과 메서드 인수 목록이라는 두 개의 매개 변수 목록이 있는 메서드입니다.

다음 예제에서는 제네릭 메서드에 액세스하기 위한 새 PowerShell 구문을 보여 줍니다.

# static generic methods
[type_name]::MethodName[generic_type_arguments](method_arguments)

# instance generic methods
$object.MethodName[generic_type_arguments](method_arguments)

같은 generic_type_arguments 다른 제네릭 형식을 포함하여 단일 형식 또는 쉼표로 구분된 형식 [string, int]목록일 수 있습니다. $obj.MethodName[string, System.Collections.Generic.Dictionary[string, int]]()

method_arguments 0개 이상의 항목일 수 있습니다.

자세한 내용은 .NET의 제네릭을 참조하세요.

예시

이 예제에서는 정수 목록을 만든 다음, 클래스를 System.Linq.Enumerable 사용하여 값을 열거하고 새 값으로 변환합니다.

변수 $list 는 정수만 포함할 수 있는 제네릭 List[T] 개체입니다. List[T] 는 만들 때 멤버의 형식을 지정할 수 있는 제네릭 클래스입니다. [System.Linq.Enumerable]::Select[T1,T2](T1,T2) 는 두 개의 제네릭 형식 매개 변수와 두 개의 정식 값 매개 변수가 필요한 제네릭 메서드입니다.

[System.Collections.Generic.List[int]]$list = @( 1, 2, 3, 4, 5 )
$result = [System.Linq.Enumerable]::Select[int, float](
    $list,
    [Func[int, float]]{
        param($Item)
        [Math]::Pow($Item, 3)
    }
)
$result

출력은 3의 강력한 값으로 올라간 각 값을 보여줍니다.

1
8
27
64
125