programming

Autoit 기초 익히기(하)


by Kitle · 2017. 06. 14.



지난글을 먼저 보시고 보시기 바랍니다.


소스 코드를 분석해 보자



$answer 를 제외하고 InputBox 부터 보자. InputBox는 Msgbox와 같이 이미 정의되어 있는 함수다. Inputbox는 사용자에게 입력받을 수 있는 영역을 출력해주고, 키보드 입력을 받을 수 있다. 역시 그 세부내용이 궁금하면 autoit document 를 참조한다. 그런데 앞에 보면 $answer 라는 변수의 값에 숫자도 문자도 아닌 함수가 들어갔다. 이렇게 함수를 쓴 경우는 함수가 처리되고 나서의 최종 결과값을 저장하게 된다. 따라서 Input박스에 사용자가 입력한 Planet Earth 값을 $answer에 저장해 두었다가, Msgbox로 그 내용을 출력 하는 게 바로 이 코드의 동작이다. ü 제공하는 함수들은 유용한 기능상자라고 생각해도 된다. 블랙박스라 생각해도 된다. 물론 내부구조를 볼 수도 있지만, 실제 사용 할 때는 블랙박스처럼 보통 함수이름과 해당 함수가 요구하는 파라메터(또는 입력값)만 잘 입력하면, Output이 나온다. 경우에 따라 다른 결과를 출력하고 싶다면? 예를 들어 시험 점수가 결과가 60점 이상이면 pass, 60점 미만이면 fail로 자동으로 결과를 내 보고 싶다. 이런 조건에 따라 달라지는 경우 어떻게 작성해야 할까? 그런 구문을 바로 “조건절” 이라고 하고 조건절을 사용하면 조건의 참, 거짓 여부에 다라 결과를 달리 할 수 있다. 조건절도 다양한 형태가 있지만, 가장 간단한 IF Else 에 대해 알아보자. 기존에 변수 선언문이나, 함수절과는 조금 다르다. 컴퓨터한테 조건을 주기위한 규칙문장이라고 생각하고 형식을 알아두자. 암기할 필요는 없다. 수없이 사용하게 되므로 자동으로 인식하게 된다. 다음의 문장을 보자. 사용자로부터 점수를 입력받고, 60점 이상이면 합격, 60점 미만이면 불합격을 출력하는 코드이다.

 $answer = InputBox("Question", "Input your score", "100") 
If $answer >= 60 then
MsgBox(0, "Result", "Pass")
Else MsgBox(0, "Result", "Fail")
Endif

60이상을 입력한 경우 Pass, 60미만을 입력한 경우 Fail이 발생한다. 지금 같은 경우는 단순하게 조건이 1개였다. 그런데 수,우,미,양,가 처럼 조건이 여러 개면 어떻게 처리해야 할까? 또한 ‘가’ 인 경우에 재수강 또는 경고로 점수가 구분된다고 하여 이런 하위조건이 또 있는 경우는 어찌해야 할까? 오토잇 도움말에는 조건절 형식과 설명이 잘 나타나 있으니 참고 하여 익히시길.. ü 생각 없이 스크립트를 반복되고 복잡하게 작성하면 추후에는 매우 복잡해진다. 반복 해서 쓰거나 간결하게 쓰지 못하면 작성할 때는 쉬울지 모르지만 차후에는 어마어마한 부메랑으로 돌아온다. ü 따라서 익숙해질 때까지 최적의 문법을 익히고 최대한 간결하게 사용할 수 있도록 해야 한다. 보통의 프로그래밍 언어와 스크립트 언어는 각자 간결한 코드와 다양한 형식과 구문이 준비되어 있다. 최대한 간결하고 쉽도록 코드를 디자인 하는 것이 매우 중요하다. 경반복문을 통해 (무한)반복 테스트를 해보자 다음 코드를 보자
$answer = InputBox("Question", "Where were you born?", "Planet Earth") 
MsgBox(0, "Your answer is", $answer)

위의 코드는 순서대로 실행되고 끝난다. 이것을 반복시키려면 코드를 컨트롤+c 컨트롤+v해서 2번 사용하면 된다.
$answer = InputBox("Question", "Where were you born?", "Planet Earth") 
MsgBox(0, "Your answer is", $answer)
$answer = InputBox("Question", "Where were you born?", "Planet Earth")
MsgBox(0, "Your answer is", $answer)

같은 문장을 반복해서 기술하는 것은 양이 많아지고, 보기에도 좋지 않다. 이렇게 반복해서 어떤 동작이나 일을 시키기 위해서는 반복문이 필요하다. 가장 무난하게 쓰이는 반복문은 바로 For – Next 구문이다. Autoit에 나온 기본예문으로 한번 코드를 돌려보자.
For $i=5 to 1 Step -1 
MsgBox(0,"Count down!",$i)
Next MsgBox(0,"","Blast Off!")

실행해 보면 MsgBox(0,"Count down!",$i) 문장은 한번 쓰였지만, 총 5번 화면에 출력 된 것을 알고 있다. Autoit의 특성상 line순서대로 위에서 아래로 실행된다. 따라서 반복문이나 분기없이 쓰인 경우는 문장 번호 순서대로 실행되고 끝이 난다.(적은 번호에서 큰번호, 편하게 위에서 아래) 그런데 분기문이나 반복문은 상황에 따라 문장 실행번호를 건너뛰거나 반복시킬 수 있게 하는 것이다. 다음 autoit editor를 보자.


For – next 문장이 1,2,3번 line에 작성되었다. For – next 는 한 세트로 next에 와서 for문의 조건에 따라 내부 문장을 반복할 것인지 다음 문장으로 넘어갈지를 결정한다. 첫번 째 문장에 그것을 통상 변수의 숫자로 제어 할 수 있다. 여기서는 변수 초기값을 5를 주고 1이 될 때까지 1씩 감소시킨다. 즉 내가 5번 반복하고 싶으면 5부터 1까지 1씩 감소하는 방법을 사용 한 것이다. 당연히 1부터 5까지 1씩 증가하게 할 수도 있으며 숫자와 증감량(step)은 여러분 자유이다. ü For – next 의 반복문은 보통 변수와 Step을 활용하여 반복 횟수를 제어한다. 반복문에 변수가 필요한 이유는 몇 번 반복할지 정해야 하기 때문이다. 이번엔 다른 반복문을 활용해 무한 루프(반복)을 시켜보자.

while 1 
$var1 = MsgBox(1,"Never Die","Kill me plz.")
if $var1 == 1 then
else
Exit
EndIf
WEnd

이번에 무한루프에 사용할 문장은 while ~ WEnd문장이다. 해당 문장은 while 조건이 참인 경우(프로그래밍에서는 1은 True를, 0은 false를 의미한다) while과 Wend 사이의 구문을 수행하고, 다시 조건을 확인하게 된다. 여기서는 while 1 이므로 항상 참인 문장으로, 무한히 내부 문장들이 반복된다. 하지만 여기서 하나의 문제가 발생한다. 테스트라는 것은 무한 테스트가 없다. 언젠가 종료되고 결과값을 내어야만 한다. 진정 무한루프로 테스트만 하는 코드를 짜면 프로그램을 멈추려면 강제로 autoit 수행 프로그램을 강제로 종료하거나, PC를 리부팅 시켜야 한다. 그렇다면 내가 원하는 시점에 무한 루프를 종료시킬 수 있는 종료 코드를 삽입하고, 때에 따라 종료시키거나, 테스트를 반복시킬 수 있어야 한다. 반복문 이전에 배웠던 분기문 기억하는가? 바로 이 분기문을 활용해 보자. 코드를 다시 보자. 맨 겉은 반복문이 싸고 있다. 그 안에 내부는 무한히 반복되도록 설계되어있다. 1번과 11번 문장이 반복문 구문이고, 그 안에 2~10번까지가 실제 반복되는 문장이다. 3번 문장을 보자. 위에서 배운 msgbox 함수의 결과값을 변수 $var1이 받고 있다. 위의 Msgbox는 “확인”, “취소”버튼을 누르게 되어있는 msgbox이다(파라메터가 1이므로). 실행 시 메시지 박스에서 “확인”을 누르면 1값을 반환하고, “취소”를 누르면 0을 넘겨주도록 되어있다. 따라서 이 값을 가지고 반복문을 계속 실행할지, 종료할지를 컨트롤 해 보겠다. 다음 if문을 보자. $var1 =1 이면 다음 문장에 뭔가를 수행해야 하는데 없다. 따라서 아무것도 수행 안 한다는 것이다. 즉 true인 경우는 if문을 종료하고 10번 문장으로 간다. 그리고 11번 문장으로 가면 반복문에 의해 다시 1번 문장으로 간다. 조건은 항상 참이므로 다시 3번 문장에서 “확인”을 누르면 같은 루틴이 반복된다. 즉 무한 반복되는 문장이 되는 것이다. 이번엔 “취소”를 눌러보자. If의 조건절이 true가 아니므로 then 다음 문장이 아닌 else 문장부터 수행한다. 고로 exit 를 수행한다. Exit는 예약어로 시스템에서 exit라는 예약어를 사용하면 프로그램을 종료하도록 설계되어 있다. 비교하면서 테스트 해보기 바란다. 정말 무한 루프인지 “확인”을 계속 눌러보자. ü Note : 반복문을 통해 사람이 반복할 테스트를 컴퓨터에게 대신 반복 시킬 수 있어 매우 유용하다. 마치며… 기본적으로 변수를 선언하는 선언문, 분기를 하는 분기문, 반복하는 반복문 3개를 익혔으므로 기본기는 충분히 익힌 셈이나 다름 없습니다. 실제 활용사례나 테스트에 대한 적용사례 등을 다뤄보고 싶었으나 쉽지 않네요. 결국 autoit의 기본문법 정도를 소개하는 정도에 그치지 않았네요. ㅠ.ㅠ 부족한 점이 많은 문서입니다. 정정이 필요한 부분이 있다면 댓글이나 메일로 연락 주시기 바랍니다.