※ 이 문서는 뭐 그냥 하면 되지. ()에서 인쇄하였으며,
저작권은 해당 블로그 운영자에게 있습니다.

AutoIt에서 Global, Local, Dim 선언의 차이

/Autoit/AutoIt :: 2009. 4. 16. 16:11

AutoIt에서 Global, Local, Dim 선언의 차이

Global은 스크립트 전체에서 사용할 수 있는 변수를 선언할 때 사용합니다.
하지만, 변수 중에서 우선순위가 가장 낮다고 할 수 있죠.

Local은 스크립트 중에서 Func을 이용해서 만든 함수 안에서만 사용할 변수를 선언할 때 사용합니다.
이렇게 만든 함수 안에서는 Global로 정의된 똑같은 변수가 있더라도 Local로 선언된 변수가 우선순위가 더 높습니다.
함수가 끝나면 Local로 선언된 변수는 없어지고, 처음에 Global로 선언된 변수가 다시 나타납니다.(?)

Global $var = "Global"

_Function()

MsgBox(0, '함수 밖', $var)

Func _Function()
	Local $var = "Local"
	MsgBox(0, '함수 안', $var)
EndFunc   ;==>_Function

Global과 Local은 이 부분만 빼면 크게 어려울 게 없습니다.

오히려 함수 밖, 그러니까 스크립트 전체에서 사용할 변수를 지정할 때는 Global과 Local의 차이가 없습니다.

 

문제는 Dim이죠.

"Dim은 그 위치에 따라서 전역변수, 지역변수를 선언할 수 있습니다."라고 설명은 하지만 이게 잘 이해가 안 되거든요.

다음 예제를 한 번 보시죠.

_Function()

MsgBox(0, '함수 밖', $var)

Func _Function()
	Dim $var = "Dim"
	MsgBox(0, '함수 안', $var)
EndFunc   ;==>_Function

첫 번째 메시지상자는 제대로 나타나지만, 제목이 "함수 밖"인 두 번째 메시지상자는 오류가 나면서 실행되지 않습니다.
함수가 끝나면서 함수 안에서 선언했던 변수가 사라지기 때문이죠.
이렇게 보면 Dim과 Local은 같은 것처럼 보입니다.

하나 더 볼까요? 첫 번째 예제에서 Local만 Dim으로 바꾼 겁니다.

Global $var = "Global"

_Function()

MsgBox(0, '함수 밖', $var)

Func _Function()
	Dim $var = "Dim"
	MsgBox(0, '함수 안', $var)
EndFunc   ;==>_Function

실행해보면 두 메시지 상자 모두 "Dim"이라는 결과를 보일 겁니다.
첫 번째 예제에서는 두 메시지 상자에서 보여주는 내용이 달랐는데, 이건 똑같이 나오네요.

Local과 Dim의 차이가 여기에 있습니다.
Local은 Global로 정의된 변수가 있더라도 함수가 끝나면 변수가 사라지고 원래 Global 변수가 나타내지만,
Dim은 Global로 정의된 변수가 있으면 그 값까지 바꿔버려서 함수가 끝나도 사라지지 않습니다.

함수 밖에서는 Global과 Dim은 똑같이 사용됩니다.

Dim $var = "Dim"

_Function()

MsgBox(0, '함수 밖', $var)

Func _Function()
	Local $var = "Local"
	MsgBox(0, '함수 안', $var)
EndFunc   ;==>_Function
Dim을 정리하자면
  • 함수 밖 : Dim = Global
  • 함수 안
    • 함수 밖에 Global로 선언된 똑같은 변수가 있을 때 : Dim = Global
    • 함수 밖에 Global로 선언된 똑같은 변수가 없을 때 : Dim = Local

잘 사용하면 좋긴 한데, 그렇다고 많이 쓰기에는 애매한 구석이 있는 Dim입니다.

블로그의 글과 그림, 첨부파일의 복제, 재배포를 금지합니다. =>  자세히 보기
티스토리 초대장 필요하신 분은 댓글남겨주세요.
give start - 굿네이버스 - 사랑의 열매 - 아름다운재단 - 어린이재단 - 유니세프
굿네이버스 배너
사랑의 열매 배너
아름다운 재단 배너 어린이 재단 배너 유니세프 한국위원회 - 배너