HOWTO · PowerShell

PowerShell에서 값을 반환하는 방법

이 기사에서는 반환 값 키워드의 목적, 반환 키워드의 작동 방식 및 Windows PowerShell에서 이를 올바르게 사용하는 방법을 설명합니다.

이 페이지의 내용

일반적으로 return 키워드는 함수, 스크립트 또는 스크립트 블록을 종료합니다. 예를 들어, 특정 시점에서 범위를 벗어나거나, 값을 반환하거나, 범위의 끝에 도달했음을 나타내기 위해 사용할 수 있습니다.

그러나 Windows PowerShell에서 return 키워드를 사용하면 예상하지 못한 출력이 스크립트에서 인쇄될 수 있어 약간 혼란스러울 수 있습니다.

이 문서에서는 return 키워드의 작동 방식과 Windows PowerShell에서 이를 올바르게 사용하는 방법에 대해 논의할 것입니다.

PowerShell에서 return 키워드 사용하기

아래 스크립트 블록은 return 키워드의 구문 기본 형식입니다.

return <expression>

return 키워드는 단독으로 나타날 수 있으며, 그 뒤에 값 또는 표현식이 올 수 있습니다. 단독으로 사용된 return 키워드는 명령 줄을 이전 호출 지점으로 되돌립니다.

return
return $a
return (1 + $a)

아래의 예제는 특정 시점에서 조건이 충족될 경우 함수를 종료하기 위해 return 키워드를 사용하는 것입니다. 이 예제에서는 반환 문이 실행될 수 있는 문장 이전에 있기 때문에 홀수는 곱해지지 않습니다.

function MultiplyOnlyEven {
    param($num)

    if ($num % 2) { return "$num is not even" }
    $num * 2
    return
}

1..10 | ForEach-Object { MultiplyOnlyEven -Num $_ }

출력:

1 is not even
4
3 is not even
8
5 is not even
12
7 is not even
16
9 is not even
20

Windows PowerShell은 보다 원주율적인 프로그래밍 관점에서 볼 때 혼란스러운 반환 의미론을 가지고 있습니다. 우리가 고려해야 할 두 가지 주요 아이디어는 다음과 같습니다:

  1. 모든 출력은 캡처되어 반환됩니다.
  2. return 키워드는 논리적 종료 지점을 나타냅니다.

이러한 내용에 비추어 볼 때, 다음 두 개의 스크립트 블록은 $a 변수의 값을 반환합니다.

표현식이 있는 return 키워드:

$a = "Hello World"
return $a

표현식이 없는 return 키워드:

$a = "Hello World"
$a
return

두 번째 스크립트 블록에서도 return 키워드는 필요하지 않으며, 명령 줄에서 변수를 호출하는 것만으로도 해당 변수를 명시적으로 반환할 수 있습니다.

PowerShell에서 파이프라인의 반환 값

스クリプ트 블록이나 함수에서 값을 반환할 때, Windows PowerShell은 자동으로 구성원을 제거하고 그들을 하나씩 파이프라인에 추가합니다. 이러한 사용 사례의 이유는 Windows PowerShell의 일회성 처리 때문입니다.

다음 함수는 이 아이디어를 보여주며 숫자 배열을 반환합니다.

function Test-Return {
    $array = 1, 2, 3
    return $array
}
Test-Return | Measure-Object | Select-Object Count

출력:

Count
-----
    3

Test-Return cmdlet을 사용할 때, 아래 함수의 출력은 Measure-Object cmdlet에 파이프됩니다. cmdlet은 파이프라인의 객체 수를 계산하며, 실행 시 반환된 수는 셋입니다.

스크립트 블록이나 함수가 파이프라인에 단일 객체만 반환하도록 하려면 다음 방법 중 하나를 사용하십시오:

PowerShell에서 단항 배열 표현식 활용하기

단항 표현식을 활용하면 반환 값을 하나의 객체로 파이프라인으로 보낼 수 있습니다. 다음 예제에서 보여줍니다.

function Test-Return {
    $array = 1, 2, 3
    return (, $array)
}
Test-Return | Measure-Object | Select-Object Count

출력:

Count
-----
    1

PowerShell에서 NoEnumerate 매개변수를 가진 Write-Output 사용하기

우리는 -NoEnumerate 매개변수를 가진 Write-Output cmdlet을 사용할 수 있습니다. 아래 예제는 return 키워드로 샘플 함수에서 파이프라인으로 보낸 객체를 계산하기 위해 Measure-Object cmdlet을 사용합니다.

예제 코드:

function Test-Return {
    $array = 1, 2, 3
    return Write-Output -NoEnumerate $array
}
Test-Return | Measure-Object | Select-Object Count

출력:

Count
-----
    1

파이프라인이 단일 객체만 반환하도록 강제하는 또 다른 방법은 PowerShell 버전 5에서 도입되었으며, 이에 대해서는 다음 섹션에서 논의할 것입니다.

PowerShell 5에서 클래스 정의하기

Windows PowerShell 버전 5.0으로, 이제 사용자 정의 클래스를 생성하고 정의할 수 있습니다. 함수를 클래스으로 변경하고, return 키워드는 그 즉시 앞에 있는 단일 객체만 반환합니다.

예제 코드:

class test_class {
    [int]return_what() {
        Write-Output "Hello, World!"
        return 1000
    }
}
$tc = New-Object -TypeName test_class
$tc.return_what()

출력:

1000

위의 클래스가 함수인 경우, 파이프라인에서 저장된 모든 값을 반환합니다.

출력:

Hello World!
1000