프날 오토핫키 강좌  v2

⚠ 이 강좌는 오토핫키 v2를 다룹니다

지금 보시는 강좌는 과거 오랜 시간동안 알려진 오토핫키(v1.1)의 차세대 버전인 오토핫키 v2를 다루고 있습니다.
만약 구버전인 '오토핫키 v1.1'의 강좌를 찾으신다면 프날 오토핫키 강좌(https://pnal.kr)를 봐주시면 되지만, 새로 오토핫키를 배우신다면 v2 버전을 배우시는 것을 강력히 추천드립니다.

28. 반복문


컴퓨터보다 프로그램이 먼저 개발되었다는 사실을 아시나요?

1800년대 당시 '해석 기관'이라는 기계식 계산기가 설계되었을 무렵, 에이다 러브레이스는 공상의 산물이던 해석 기관의 설계만 보고 계산을 해주는 알고리즘을 작성한 바 있습니다. 최초의 프로그램이었죠. 에이다는 최초의 프로그래머였고요.

에이다가 닦은 프로그래밍의 기초는 현대 프로그래밍에 큰 영향을 주었는데, 그 중 가장 크게 영향을 끼친 것을 뽑자면 단연 '반복문', '조건문'이라는 개념의 발명입니다.

그만큼 프로그래밍에서 '반복'과 '조건'은 빠질 수 없는 요소입니다. 프로그래밍의 역사와 함께한 개념이며, 현재까지도 큰 변화 없이 이어지고 있는 위대한 발명입니다.

반복문

지금까지 작성한 스크립트는 위에서 아래로 순차 진행되었습니다. 그러나 반복문을 사용하면 스크립트의 흐름을 위로 올릴 수 있으며, 지정한 구간을 반복하게 할 수 있습니다. 같은 작업을 여러 번 반복하는 것은 물론, 일정한 규칙을 가지며 반복할 수도 있습니다.

오토핫키의 반복문은 Loop라는 문(Statement)으로 사용할 수 있습니다. 반복 횟수를 지정해줄 수 있는데, Loop는 함수가 아니기 때문에 괄호로 감싸지는 않습니다. 지정하지 않으면 무한 반복합니다. 그리고 반복할 구간은 블록으로 지정해주죠. 정리하면 아래와 같습니다.

1Loop 반복횟수
2{
3 //반복할 내용
4}
반복문의 기본 형태

Tip: 반복 횟수에 변수를 쓸 수 있습니다

아래와 같이, Loop 뒤에 변수를 써주어 반복 횟수를 지정할 수 있습니다.

Loop num

A_index

반복문의 반복 횟수가 담겨 있는 내장 변수도 있습니다. 바로 A_Index입니다. 이 내장 변수에는 현재 진행 중인 반복문을 얼마나 반복했는지가 숫자로 들어있습니다.

1Loop 3
2{
3 MsgBox(A_index "회 반복 중")
4}
A_index의 출력

break와 continue

break는 횟수가 다하지 않은 반복문을 탈출하는 가장 적절한 방법입니다. 반복문을 진행하다 break를 만나면 그 반복문을 탈출하죠.

1Loop
2{
3 MsgBox("3번 줄")
4 break
5}
첫 번째 반복에서 바로 break를 만나서 결국 반복이 되지 않습니다.

함수는 아니지만 Loop처럼 뒤에 숫자를 적어줄 수 있는데, 탈출할 반복문의 개수를 의미합니다. break 2라고 쓰면 두 개의 반복문을 탈출하죠.

1Loop
2{
3 Loop
4 {
5 break 2
6 }
7}
5번 줄에 의해 두 개의 반복문을 탈출합니다.

또, continue를 만나게 되면 남은 반복문 진행을 건너 뛰고, 다음 반복으로 속행해줍니다. 예를 들어서 아래와 같이 작성하면 5번 줄은 실행되지 않는다는 경고가 나타나며, 무시하고 실행시키면 5번 줄이 실행되지 않는다는 것을 눈으로 볼 수 있습니다.

1Loop
2{
3 MsgBox("3번 줄")
4 continue
5 MsgBox("5번 줄")
6}
5번 줄을 실행하지 않는다는 경고가 나타납니다.

continue도 숫자를 적어주어 속행할 반복문의 개수를 지정해 줄 수 있습니다. 잘 사용되지 않으므로 '그렇구나' 하고 넘어가시면 됩니다.

아쉽게도 지금은 breakcontinue를 사용해보기 곤란합니다. 적절한 예제를 만들기 어렵거든요. 그렇기 때문에 다음 강에서 조건문을 배우면, 예제와 함께 결합해서 알려드리도록 하겠습니다.

실습

1. 반복문의 기초적인 사용

예를 들어서, 알림 상자를 세 번 나타내려면 아래와 같이 작성하면 될 것입니다.

1Loop 3
2{
3 MsgBox("Hello!")
4}
예제 1. 세 번 나타나는 알림 상자

2. 증가하는 값의 사용

변수를 사용해서 증가하는 값을 표현해볼까요? 아래와 같이, var 변수 하나의 초깃값을 2로 두고, 1회 반복시마다 2씩 증가시키며 출력해보겠습니다.

1var := 2
2
3Loop 5
4{
5 MsgBox(var)
6 var += 2
7}
예제 2. 2씩 늘어나는 변수를 출력

실행시켜보시면 어떤가요? 알림 상자로 246810이라고 차례차례 출력됩니다. 반복될 때마다 6번 줄을 만나 var 변수의 값이 2씩 증가하기 때문이죠.

3. 다중 반복문

반복문 안에 반복문이 있으면 어떨까요? 이럴 경우 각각의 규칙으로 변화하는 여러 변수를 사용할 수 있겠지요.

1outer := 0
2inner := 0
3
4Loop 5
5{
6 outer++
7 Loop 5
8 {
9 inner++
10 MsgBox("바깥쪽 Loop: " outer "회`n안쪽 Loop: " inner "회")
11 }
12 inner := 0
13}
예제 3. 이중 반복문

위와 같은 구조의 이중 반복문은 처음 보면 해석이 어려울 수 있습니다. 오토핫키는 한 줄씩 순차 진행된다는 점을 명심하세요. 그리고 눈으로 한 줄씩 따라가며 순서를 짚어보세요.

바깥쪽 Loop: 4회, 안쪽 Loop: 2회 라고 적혀 있는 알림 상자의 모습 사진 1. 실행 결과

위 사진과 같이, 안쪽 반복문에서 inner 변수를 5까지 늘리면서 출력한 이후, 다시 0으로 초기화 한 다음 바깥 Loop로 인해 또다시 반복하게 됩니다.

이 '예제 3'은 꼭 이해하셔야합니다! 이 부분을 이해하지 못하면 향후 강에서 이해가 안되는 부분이 많습니다. 반드시 각 변수가 왜 이렇게 변하는지를 이해하신 후 넘어가주시길 바랍니다.

예제는 이중 반복문을 들었지만, 삼중, 사중으로도 사용할 수 있습니다. 그러나 블록이 끝도 없이 중첩되는 것은 좋지 못하다는 점을 알아두세요.

질문하러 가기