프날 오토핫키 강좌
누르면 강좌 리스트가 나와요
프날 오토핫키 강좌

⚠ 이 강좌는 오토핫키 v1을 다룹니다

지금 보시는 강좌는 구버전 오토핫키(v1.1)를 다루고 있습니다. 따라서 본 강좌의 내용은 현재 최신 오토핫키 버전 (v2.0)과 호환되지 않습니다. 구버전의 정보가 필요한 것이 아니라면, 가능한 한 새로운 사이트에 작성한 v2 강좌(https://ahkv2.pnal.dev)를 봐주시길 바랍니다.

[프날 오토핫키] 27. 조건문 (상)

변수(연산자), 반복문과 더불어 프로그래밍에서 제일 중요한 조건문 파트입니다. 다소 이해가 힘들수도 있습니다. 천천히 읽어주세요.

 


 조건문 

"~이면 ~하고, ~라면 ~해라"

컴퓨터에겐 위와 같은 명령을 내려주어야 할 때가 있습니다. 아니, 꽤 많습니다. 사실 우리가 의식하지 않을 뿐, 일상 생활에서도 이런 경우는 많습니다. 가령, "마트에 갔다가 달걀이 있다면 그것도 사와줘" 라던가, "쭉 직진하다가 사거리가 나오면 좌회전 하면 돼" 라던가요.

 

컴퓨터 또한 이런 경우가 많습니다. 보통 변수를 비교 할 때 조건문을 사용합니다. 아래와 같이 말입니다.

만약 var 변수의 값이 3이라면, 반복문을 탈출해줘!

이렇게 "만약 ~ 이라면"을 뜻하는 구문은 오토핫키로 아래처럼 표현합니다.

if (조건)
{
    // 조건이 참일 때 할 행동
}

그리고 if 밑에, "조건이 아니라면" 할 행동은 else 구문을 통해 넣을 수 있습니다.

if (조건)
{
    // 조건이 참일 때 할 행동
}
else
{
    // 조건이 거짓일 때 할  행동
}

 

조건에는 비교 연산자를 사용합니다. 드디어 비교 연산자를 사용하게 되네요.

아래처럼 쓰면 var 변수가 2보다 클 때를 의미합니다.

if (var > 2)
{
    // var 변수가 2보다 클 때는 이 곳을 거치며
}
else
{
    // var 변수가 2보다 크지 않으면 이 곳을 거칩니다.
}

그런데 뭔가 이상합니다. 변수를 사용할 땐 %기호를 사용해준다고 분명 배웠습니다.

그렇지만 if문의 조건을 써줄 때 %기호를 쓰지 않았네요. 이는 아래 내용을 숙지하시면 이해하실 수 있습니다.

 


 제일 기초이지만 중요한 Expressions 

어느 땐 %기호를 쓰고, 어떨 땐 안쓰고.. 문자열엔 따옴표를 했다가, 어쩔땐 안하고...

 

이에 대해선 Expressions라는 오토핫키 래퍼런스를 보시면 되는데, 이는 변수의 사용에 관해 쭉 써놓은 도움말 문서입니다.

 

제가 요약해서 한글로 적어드리면 다음과 같습니다.

  • 변수를 쓸때 일반적으로는 %기호를 사용해주시면 되고요, 이 경우 문자열은 그대로 써줍니다.
  • 괄호 안에서 사용하실 땐 그대로 써주시고, 문자열은 따옴표로 감싸줍니다.

즉, 아래처처럼 보시면될 것 같습니다.

var는 변수이고, "문자열"은 문자열일때

[옳은 구문]
- (var "문자열")
- %var% 문자열

[틀린 구문]
- (%var% 문자열)
- var "문자열"

연산자를 사용할 때 또한 변수명에 괄호를 쓰지 않고, 문자열에 표시를 해줍니다.

[옳은 구문]
- var := var "문자열"
- var++

[틀린 구문]
- var := %var% 문자열
- %var%++

 


 예제 

이제 예제를 볼까요, 아래 예제는 반복문이 100회를 넘으면 자동으로 탈출되는 구문입니다. Loop에 Count 매개변수를 작성해주지 않아도 탈출이 되는 모습을 볼 수 있습니다.

a := 0
Loop
{
    a++
    if (a = 100)
    {
        Break
    }
}
MsgBox, %a%회 반복했습니다.
ExitApp

27강 1.ahk
0.00MB

반복문은 보신 것과 같이 if와 else로 나뉘어져 있습니다. if 옆에는 조건이 들어가고요. 행동의 범위는 중괄호로 감싼 것을 볼 수 있습니다.

 

아래 스크립트는 어떤 MsgBox가 실행될까요?

var := 99
if (var = 99)
{
    MsgBox, ①
}
if (var < 100)
{
    MsgBox, ②
}
if (var <> 99)
{
    MsgBox, ③
}
if (var != 99)
{
    MsgBox, ④
}

27강 2.ahk
0.00MB

정답은 ①, ②번 MsgBox입니다. 조건을 잘 살펴보시면 어렵지 않으실겁니다.

 

마지막으로 아래와 같은 예제를 생각해보겠습니다.

F1::
stop := 0
Loop
{
    MsgBox, 안녕 x %A_index%
    if (stop = 1)
    {
        Break
    }
}
ExitApp

F2::
stop := 1
return

27강 3.ahk
0.00MB

F1을 누르면 MsgBox가 계속 켜질겁니다. 확인 버튼을 눌러도 새로 생기겠죠. 반복문에 싸여져있기 때문입니다.

그렇지만 F2를 누르고 MsgBox의 확인 버튼을 누르면 MsgBox가 꺼질것입니다.

 

반복문 안에는 stop 변수의 값이 1이면 탈출하는 조건문이 있고, F2를 누르면 stop 변수에 1을 대입하기 때문입니다.

 


다음 강에선 if와 else를 조합한 if-else문을 배우고, 내장변수 세 개를 더 배우도록 하겠습니다. 이번 강보다는 쉬울것입니다.

이번 강은 확실히 이해하시고 넘어가주세요. 직접 예제를 만들어보는 것이 중요합니다.

 


| 27. 조건문 (상) |