For 루프는 모든 프로그래밍 언어에서 가장 유용한 도구 중 하나이며, Microsoft PowerShell 역시 예외가 아닙니다. 명령을 반복 실행하는 데는 다른 루프 구문도 사용할 수 있지만, For 루프가 아마도 가장 직관적이고 간결한 선택일 것입니다.
배열 순회부터 특정 횟수만큼 함수를 실행하는 작업까지, For 루프로 할 수 있는 일은 무궁무진합니다. 이 글에서는 PowerShell에서 For 루프를 활용하는 방법을 단계별로 살펴보겠습니다.
PowerShell에서 For 루프는 어떤 용도로 사용될까?
명령 프롬프트와 달리 PowerShell은 완전한 스크립팅 환경입니다. 즉, 명령어를 일일이 입력하는 대신 재사용 가능한 PowerShell 스크립트를 작성해 작업을 자동으로 수행할 수 있습니다. 그리고 이러한 자동화 모듈을 작성하는 핵심 열쇠가 바로 For 루프입니다.
For 문은 지정된 변수의 값을 변경하면서 진행 상황을 추적하며, 스크립트 블록을 정해진 횟수만큼 반복 실행합니다. 덕분에 다양하고 흥미로운 시나리오에 활용할 수 있습니다.
숫자 시퀀스 생성, 소수 판별, 카운트다운 타이머 표시 등에 사용할 수 있으며, 더 실용적으로는 객체 배열을 순회하면서 각 항목에 대해 특정 작업을 수행할 수도 있습니다.
PowerShell For 루프의 기본 문법
For 루프는 Windows PowerShell에서도 다른 프로그래밍 언어와 동일한 방식으로 작동합니다. 추적 변수를 초기화하는 식, 변수 값을 검사하는 조건식, 변수를 갱신하는 식이 'For' 뒤의 괄호 안에 세미콜론으로 구분되어 들어가고, 그다음 중괄호로 묶인 실행문 목록이 따라옵니다.
For (초기화; 조건; 갱신)
{
스크립트 블록
}
PowerShell 스크립트에서 For 루프 사용하기
For 루프의 사용법은 매우 간단합니다. 약간씩 변형되는 단계를 반복해야 하는 상황이라면 언제든 For 루프에 넣으면 됩니다.
예를 들어, 변수 $n에 담긴 숫자까지의 모든 자연수의 합을 구하는 코드를 작성한다고 가정해 보겠습니다. 다음은 기본적인 For 루프 예제입니다.
$n = 10
$sum = 0
For ($i = 1 ; $i -le $n ; $i++)
{
$sum = $sum + $i
}
"$n까지 자연수의 합은 $sum입니다"
For 루프로 배열 접근하기
숫자 시퀀스 생성만으로는 대부분의 사람들이 PowerShell을 쓰는 이유가 되지 못합니다. 더 흔한 용도는 배열을 순회하는 것입니다.
7개의 요소를 가진 배열 $week가 있다고 가정해 보겠습니다. 간단한 For 루프만으로 배열에 담긴 요일 목록을 출력할 수 있습니다. 아래 예제를 참고하세요.
For ($i = 0 ; $i -lt $week.Length ; $i++)
{
$week[$i]
}
ForEach 루프로 배열을 더 빠르게 순회하기
For 루프의 또 다른 형태가 바로 ForEach 문입니다. 이 버전은 PowerShell 배열의 내용을 하나씩 처리하는 과정을 크게 단순화해 줍니다. 앞서 살펴본 코드는 다음과 같이 다시 작성할 수 있습니다.
Foreach ($day in $week)
{
$day
}
더 복잡한 객체를 다룰 때는 Foreach-Object cmdlet을 사용해 PowerShell 명령의 출력 내용에 대해 작업을 수행할 수도 있습니다.
For 루프는 다른 루프와 무엇이 다를까?
For 루프만이 유일한 반복문은 아닙니다. 대부분의 프로그래밍 언어처럼 PowerShell에도 여러 종류의 루프가 존재합니다.
While 루프
가장 단순한 형태는 While 루프입니다. 조건식과 스크립트 블록만 있으며, 테스트 식이 참으로 평가되는 동안 계속 실행됩니다. 조건식이 먼저 평가되기 때문에 코드가 한 번도 실행되지 않거나 무한 루프에 빠질 가능성도 있습니다.
While (조건)
{
스크립트 블록
}
Do-While 루프
조건식이 거짓으로 평가되더라도 최소 한 번은 실행되어야 하는 스크립트를 작성할 때는 Do-While 루프를 사용하면 됩니다. While 루프와의 유일한 차이점은 명령 블록이 조건 앞에 위치한다는 점으로, 코드가 조건식 검사 전에 먼저 실행됩니다.
Do {
스크립트 블록
}
While (조건)
Do-Until 루프
이 루프의 또 다른 변형이 Do-Until입니다. 기본적으로 코드 블록을 실행한 뒤, 테스트 식이 참이 될 때까지 반복합니다. 즉, Do-While 루프의 정반대 동작입니다. 다만 표준 Do-While 루프에서 조건만 수정하면 같은 결과를 얻을 수 있어 실제로는 그다지 유용하지 않은 구조입니다.
Do {
스크립트 블록
}
Until (조건)
그런데 왜 For 루프가 더 나을까?
이 외의 루프 구조들의 문제점은 초기값 설정이나 갱신문이 포함되어 있지 않다는 것입니다. 루프 밖에서 변수를 직접 생성하고, 매 반복마다 변수를 증가(또는 감소)시키는 코드를 직접 작성해야 합니다.
예상할 수 있듯이 개발자들은 이 단계를 종종 잊곤 하며, 그 결과 의도대로 작동하지 않는 스크립트가 만들어져 소중한 디버깅 시간을 낭비하게 됩니다.
반면 For 루프는 시작 괄호 안에 초기화식과 증감식을 반드시 포함하도록 강제하기 때문에 이런 문제를 원천적으로 방지합니다. 그 결과 더 깔끔하고 견고한 스크립트를 작성할 수 있습니다.
PowerShell에서 For 루프는 언제 사용해야 할까?
PowerShell의 핵심은 자동화 스크립트 작성이며, 이를 위한 가장 유용한 도구가 바로 For 루프입니다. 복사-붙여넣기로 반복하던 많은 작업을 더 간결하고 우아한 스크립트로 대체할 수 있습니다.
이 루프의 가장 일반적인 용도는 배열을 한 항목씩 순회하는 것입니다. 더욱 간결한 스크립트를 원한다면 ForEach 루프를 활용할 수도 있습니다. 물론 For 루프로 숫자 시퀀스를 생성할 수도 있지만, 이런 경우는 드물습니다.
For 루프는 루프의 필수 요소들을 모두 매개변수 안에 담아 해당 문장 누락으로 인한 오류를 방지함으로써 다른 반복 알고리즘보다 우위에 있습니다. 이러한 이유로 명령 집합을 반복 실행해야 하는 모든 상황에서 For 루프는 없어서는 안 될 필수 도구입니다.