프날 오토핫키 강좌  v2

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

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

4. 오토핫키 구문을 분석하는 방법


드디어 오토핫키를 공부해봅시다. 이번 강에서는 오토핫키 스크립트를 어떻게 분석하면 좋을지 알아보겠습니다.

위에서 아래로 읽는 스크립트

오토핫키 코드는 기본적으로 위에서 아래로 한줄씩 순차적으로 수행됩니다. 예를 들어서 아래와 같은 코드가 있다고 해볼까요?

1MsgBox("Hello")
2WinActivate("ahk_exe notepad.exe")
3Send("Hello")

우리는 아직 오토핫키를 배우지 않았기 때문에 위 구문이 정확히 어떤 역할을 하는지 모릅니다. 그러나 오토핫키 코드는 위에서 아래로 실행된다고 했으므로, 1번줄, 2번줄, 3번줄 순서로 진행됨을 알 수 있습니다.

줄 구분은 반드시 지켜야합니다

오토핫키는 한 줄씩 읽어들이며 수행되는 인터프리트 언어이기 때문에, 한 줄에 여러 명령을 쓰는 것은 특별한 경우가 아닌 한 허용되지 않습니다. 대부분의 상황에서, 반드시 한 줄엔 하나의 명령만이 존재해야합니다.

그와 달리 띄어쓰기(공백)와 대소문자 혼용은 대부분의 상황에서 자유롭게 해도 됩니다. 한 칸 띄울거라면 두 칸 띄워도 되며, MsgBox라는 함수를 msgBOX라고 대소문자를 바꿔 써도 잘 작동할 것입니다. 그러나 임의로 코딩 스타일을 흐트리는 것은 좋지 못하며, 이왕이면 표준적인 용례를 따르는 것이 좋습니다.

오토핫키는 함수를 이용하여 명령을 내립니다

오토핫키에서 명령은 함수를 호출하는 것으로 구현됩니다. 함수라는 말이 어렵지만, 일단은 일종의 명령이라고 이해하시면 됩니다. 호출하는 함수마다 다른 기능을 한다는 것이지요. 만약 로봇 강아지를 프로그래밍 한다면, '짖기', '먹기', '자기'와 같은 함수를 호출하여 각각의 기능을 수행할 수 있습니다.

오토핫키에서 함수를 호출하는 한 줄은 함수명인수로 나뉘어져있습니다.

1AAAA(BBBB, CCCC, DDDD)

예를 들어서 위와 같은 줄이 있다면, AAAA는 함수명이며 BBBB, CCCC, DDDD는 인수입니다. 함수명은 반드시 한 개여야하며, 인수는 여러 개가 올 수 있습니다. 인수는 해당하는 함수를 어떻게 동작시킬지를 결정합니다. 예를 들어서 로봇 강아지의 '짖기'가 다 똑같은 짖기가 아닐 것입니다. 높게 짖을수도, 낮게 짖을수도, 으르렁댈수도 있지요. 두 번 짖을수도 있고요. 이는 인수를 어떻게 적어주냐에 따라 조절할 수 있습니다.

1짖기("낮게", 2)

예를 들어 이런식으로 적으면 로봇 강아지를 낮게 두 번 짖게 할 수 있습니다. 물론 짖기()함수는 오토핫키에 존재하지 않습니다.

함수의 원형

그리고 해당 함수를 이용할 때 어떤 인수를 넣어주어야 하는지 알아보기 쉽게 적은 것이 바로 함수의 원형입니다. 원형에서 어떤 인수를 적어야하는지 표현한 것을 매개변수라고 하고요.

예를 들어서, 오토핫키에 CookRamyeon이라는 컴퓨터에게 라면을 끓이라는 지시를 내릴 수 있는 함수가 있다고 가정하고, CookRamyeon의 '함수의 원형'이 아래와 같다고 해봅시다.

CookRamyeon(라면의 종류, 물의 양, 조리 시간 [, 스프의 양])

'라면의 종류', '물의 양', '조리 시간', '스프의 양'은 매개변수입니다. 여러분은 이를 보고 인수를 작성해주면 됩니다.

1CookRamyeon("Jin", 500, 5)

컴퓨터에게 Jin 이라는 라면을 500ml의 물의 양으로 5분간 끓이라는 명령이 완성되었습니다.

그런데, '스프의 양'은 지정해주지 않았네요. 왜냐하면 스프의 양은 선택 매개변수이기 때문입니다. 선택 매개변수란 작성하지 않아도 문제가 없는 매개변수를 뜻합니다. 선택 매개변수를 작성하지 않으면 미리 함수에 설정되어있는 기본값으로 실행됩니다. 그러므로 이는 생략해도 오류가 나지 않습니다.

어떠한 매개변수가 선택 매개변수인지도 역시 함수의 원형을 보면 알 수 있습니다. 함수의 원형에서 대괄호로 묶여 있는 부분은 선택 매개변수라는 뜻입니다. 위의 CookRamyeon 함수의 원형에서 [, 스프의 양]이라고 대괄호 처리가 되어있죠?

오토핫키에서 함수의 원형은 함수에 어떤 값을 인수로 전달해주어야하는지 알아보기 쉽게 적은 힌트에 불과합니다. 따라서 여러분은 함수의 원형을 보고, 인수가 몇 개 필요한 함수인지, 또 어떤 인수가 필요한지 정도만 파악할 줄 알면 OK입니다.

[점검 질문] 아래와 같은 함수의 원형에서, '함수명', '매개변수', '선택 매개변수'는 무엇인가요?

FileAppend(Text [, Filename, Options])
정답 펼치기/접기 함수명: FileAppend
매개변수: Text, FileName, Options
선택 매개변수: FileName, Options

Tip: 인수는 '전달했다'라고 합니다.

인수는 함수(혹은 매개변수)로 '전달했다' 혹은 '제공했다'라고 표현하는데, 그 이유는 추후에 배울 것입니다.

Tip: 인수와 매개변수의 차이

- 인수: 함수를 어떻게 동작하는지 결정하기 위해 호출할때 함께 전달해주는 값
- 매개변수: 함수의 원형에서, 어떤 인수를 넣어야하는지 표시해주는 이름.

예를 들어서, 위의 CookRamyeon 예시에서 "물의 양"은 매개변수, "500"은 함수에게 전달해준 인수라고 생각하시면 됩니다. 함수의 원형은 제가 여러분께 알려드리는 용도이므로, 실제 코드 작성시엔 인수만 작성하게 되겠죠?

엄밀히 말하면 매개변수는 '함수 안에서 사용되는 호출시 전달받은 값'을 나타내지만, 이를 이해하려면 52강부터 시작되는 함수 강좌를 참고해야하므로 아직은 "어떤 인수를 넣어야하는지 표시해주는 힌트"정도로만 이해하시길 바랍니다.

다음 강부턴 드디어! 오토핫키 스크립트를 제작해보겠습니다. 좀 어려웠죠? 이번 강에서는 함수니 매개변수니 인수니, 어려운 말만 가득 나와서 말이지요. 장담컨데 다음 강부터는 훨씬 쉽고, 템포도 느려질 것입니다.

질문하러 가기