▣중-고급자 활용/AutoIt 특강

AutoIt (4)

횡재수 2008. 7. 28. 03:57

이 강좌는 "http://cafe.naver.com/usboffice"의 

[클로임]님의 글을 필요한 부분만 발췌 했습니다. 

 

 

 

변수의 범위(Scope)
변수의 범위란 한 변수가 프로그램 내에서 얼마 만큼 영향력을 행사하고 받을 수 있는지에 대한 경계를 말합니다.

일반적인 프로그램들을 저는 정의 부분, 동작 부분, 함수 부분으로 나누어 봅니다.

    * 정의부분 : 변수의 정의 및 기타 코드 내에서 필요한 모든 것들을 정의해 둡니다. 일반적으로 코드의 가장 처음에 보여집니다.

    * 동작부분 : 정의부분에서 정의한 것들과 함수 부분에서 정의된 것들을 토대로 실제 프로그램이 동작하도록 (이른바) 로직을 구현하                    는 부분입니다. 실질적인 동작이 이곳에서 다 이루어집니다.

    * 함수부분 : 공통적으로 처리될 수 있거나 재사용이 가능한 로직이나 동작을 이곳에 함수로 정의해 둡니다. (적어도 제 생각에) 함수                    는 작게 쪼개어진 동작부분 입니다. 함수는 동작부분에서 호출했을때 그 자체로 동작을 마치거나 반환값을 동작부분으로                     던져주기도 합니다. 여기서의 함수란 프로그래밍 언어가 기본적으로 제공하는 함수가 아닌 코더가 새롭게 정의하는 '사용                    자정의함수' 입니다.


맞는 얘기들인지는 모르겠지만, 제 머릿속에는 이렇게 정리가 되어있습니다 :D
갑자기 프로그램의 구조를 얘기하는데는 다 이유가 있는겁니다. 아무리 제가 쓸데없는 얘기를 많이 한다한들.. ㅋ

눈여겨 볼것은 함수부분입니다. 함수는 코드파일 안에 또 다른 공간을 하나 만들어둔 것이라고 생각하면 될것 같네요.
하나의 코드파일 안에있는 변수들은 일반적으로 해당 파일안에서는 어디서든 접근 및 수정이 가능합니다.
그러나 (하나의 코드파일 안의) 함수 안에 있는 변수는 다른 함수안에서나 해당 함수 밖에서 접근 및 수정할수 없습니다.

백문이 불여일견, 코드를 한번 보죠.

01    Dim $A
02    $A = "global variable"
03
04    Func test()
05        $A = "changed global variable"
06    endfunc
07
08    Func test2()
09        Dim $B
10        $B = "local variable"
11       MsgBox(0, "Variable's Scope", $B)
12    endfunc
13
14    MsgBox(0, "Variable's Scope", $A)
15    test()
16    MsgBox(0, "Variable's Scope", $A)
17    test2()
18    MsgBox(0, "Variable's Scope", $B)


지금까지 예제중에 제일 긴 코드네요 ;; (급하게 만들다 보니 뭐 ;;, 저장하신 뒤 컴파일 하지 마시고 F5 로 실행만 해보세요)

1~2 번 라인에서 $A 라는 변수를 정의하고 여기에 "global variable" 이라는 값을 넣어줍니다.
4~12번 라인은 test() 와 test2() 라는 사용자 정의 함수 이구요. 일단은 넘어가겠습니다.
14번 라인에서 MsgBox() 함수로 변수 $A 에 들어있는 값을 출력합니다.
15번 라인에서 test() 라는 사용자정의함수를 호출합니다. test() 함수의 내용인 5번 라인이 처리가 된다음 특별한 명령어가 없으니 16번으로 돌아갑니다.
16번라인에서 MsgBox() 함수로 변수 $A 에 들어있는 값을 출력합니다. 내용이 바뀐걸 확인하셨나요? :D
17번 라인에서 test2() 함수를 호출합니다. 9~11번 라인을 처리하겠죠. 역시나 모두 처리한 뒤 18번 라인으로 돌아갑니다.
18번 라인에서 MsgBox() 함수로 변수 $B 에 들어있는 값을 출력해야 되는데, 이게 왠일?!
모두들 에러가 나면서 프로그램이 종료가 되는거 확인하셨나요? 에러 안나면 이상한 겁니다~ :D
해당 에러는 $B 라는 변수가 선언되지 않았다는 말이지요.

test2() 함수에서 분명 $B 를 선언하고(9) 값을 주고(10) 확인까지 했는데(11) 이게 뭔소리냐 라는 분들..
이것이 바로 변수의 범위(scope) 입니다. 자식인 test2() 함수가 모종의 다른 공간에 변수 $B 라는 꿀단지를 숨겨두고 혼자서 야금야금
'꿀 퍼먹어' 하고 있는데 난데없이 꿀단지 변수 $B 를 내놓으라고 엄마가 물어보니까 오리발 내미는 격입니다.
이렇게 특정 지역에서만 사용가능한 변수를 Local Variable 즉, 지역 변수라고 부릅니다.

그렇다면 test() 함수에서는 어떻게 먼저 선언된 변수를 사용할까요? 자식 test() 에서 엄마의 꿀단지 변수 $A 를 사용할 수 있는 이유는..

이렇게 모든곳에서 접근이 가능한 변수를 Global Variable 즉, 전역 변수라고 부릅니다.

'▣중-고급자 활용 > AutoIt 특강' 카테고리의 다른 글

AutoIt (6)  (0) 2008.07.28
AutoIt (5)  (0) 2008.07.28
AutoIt (3)  (0) 2008.07.28
AutoIt (2)  (0) 2008.07.28
AutoIt (1)  (0) 2008.07.28