-
[PowerShell] 함수 오버로딩처럼 시나리오별 입력 매개변수 정의를 변경하는 매개변수집합(Parameter Set) 알아보기Shell & CMD/PowerShell 2023. 12. 2. 16:23반응형
파워셸에선 파라메터 명칭에 대한 자동완성 기능을 기본적으로 제공한다. 예를들어, Out-File 명령어에 '-f' 만 입력하고 탭 키를 누르면 -FilePath가 나온다.
편리한 기능이지만 일부 함수는 파라메터가 모두 필요하지 않거나, 다른 파라메터가 정의가 반드시되어야 사용할 수 있는 파라메터가 존재할 수 있다. 프로그래밍 상에선 함수 오버로딩(Overloading) 개념을 통해 동일한 함수명에 상황에 맞게 사용할 수 있도록 여러 파라메터를 지정할 수 있지만, 파워셸에선 원칙적으로 함수오버로딩을 지원하지 않는다. 만약 동일한이름을 가진 함수가 여러개 존재한다면 나중에 정의한 함수만 유효하다.
다행히 오버로딩처럼 사용할 수 있는 개념이 존재하는데, 파워셸에선 이것을 '매개변수 집합(Parameter Set)' 이라고 부른다.
매개변수 집합(Parameter Set)이란?
매개변수 집합에 대한 설명은 마이크로소프트 공식사이트에서 아래와 같이 명세하고 있다.
다양한 시나리오에 대해 다른 작업을 수행할 수 있는 단일 함수를 작성할 수 있도록 합니다. 매개 변수 집합을 사용하면 사용자에게 다른 매개 변수를 노출할 수 있습니다. 또한 사용자가 지정한 매개 변수에 따라 다른 정보를 반환합니다. 한 번에 하나의 매개 변수 집합만 사용할 수 있습니다.
다양한 시나리오에 대해 다른 작업을 수행할 수 있는 단일 함수를 작성하는 방법. 결국 오버로딩 대체가 가능한 개념이다.
매개변수 집합을 이용한 함수 오버로딩 예제
보다 정확한 이해를 위해 $PROFILE에 아래 메소드를 생성하자.
function Write-Hello { [CmdletBinding(DefaultParameterSetName = 'Default')] param ( [Parameter(Mandatory, ParameterSetName='Default', Position=0)] [string] $Name, [Parameter(Mandatory, ParameterSetName='Second', Position=0)] [switch] $ComputerOwnerName, [Parameter(Mandatory, ParameterSetName='Default', Position=1)] [string] $LastName ) if ($ComputerOwnerName) { $com = Get-ComputerInfo Write-Host "Hello $($com.CsPrimaryOwnerName)" } else { Write-Host "Hello, $Name! $LastName" } }
작성이 완료되었다면 새로운 Powershell 창을 열고 Write-Hello 입력 후 -Name, -ComputerOwnerName, -LastName 를 찾아보자. 입력한 모든 파라메터가 사용가능하게 나타날 것이다.
아래 이미지처럼 모든파라메터를 보고 싶다면, [PowerShell 기초] 6. Powershell 프로필 설정 :: 또치의 삽질 보관함 (tistory.com) 참조하기 바란다. Windows 라면 CTRL + Space로 찾을 수 있다.
여기서 -Name 파라메터에 값을 지정해주고 다음 파라메터를 찾아보도록 하자. 이때는 -ComputerOwnerName가 더 이상 유효하지 않은것을 확인할 수 있다.
-Name이 아닌 -LastName을 먼저 지정해도 -ComputerOwnerName가 없다.
반대로 -ComputerOwnerName를 지정하면 -Name과 -LastName이 모두 없는 것을 확인할 수 있다.
이처럼 ParameterSet 설정을 통해 오버로딩처럼 상황에 맞게 파라메터를 필터링하여 안내할 수 있다.
DefaultParameterSetName 속성은 함수에 파라메터를 지정하지 않고 바로 실행시, 질의 입력할 기본 매개변수 집합을 지정한다. Write-Hello 함수를 파라메터 없이 실행하면 예제와 같이 Name 파라메터를 입력하라 안내할 것이다.
이것으로 매개변수 집합(Parameter Set)을 알아보았다.
참조
반응형'Shell & CMD > PowerShell' 카테고리의 다른 글