프날 오토핫키 강좌  v2

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

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

25. 변수의 유효 범위 (하)


지난 강에서 지역 변수와 전역 변수의 개념을 배웠고, 또 지역에서 전역 변수를 만드는 방법까지 배웠습니다. 이번 강은 정적 변수에 대해 배워볼 것입니다.

변수의 유효 범위

다시 표를 가져와보겠습니다. 개념을 정리해보자고요.

종류사용 가능 범위생존 기한
지역(Local) 변수해당 함수 내해당 함수가 끝나면 소멸
전역(Global) 변수스크립트 전체프로그램이 종료될 때까지 소멸 안함
정적(Static) 변수해당 함수 내프로그램이 종료될 때까지 소멸 안함

1. 지역 변수

해당 지역 안에서만 사용 가능하고, 그 지역이 끝나면 소멸되는 변수를 지역 변수라고 말합니다. 일반적으로 지역 내에서 변수를 만들면 자동으로 지역 변수로 만들어집니다. 따라서 A 핫키 지역에서 만든 변수는 B 핫키 지역에서 사용할 수 없습니다.

2. 전역 변수

반대로, 스크립트 전역에서 사용할 수 있는 변수를 전역 변수라고 합니다. 자동 실행 스레드에서 만든 변수는 자동으로 전역 변수로 만들어집니다. 당연히 모든 지역에서 자유롭게 사용할 수 있습니다.

정적 변수

이제 정적 변수에 대해 알아봅시다.

정적 변수는 그 수명이 프로그램이 종료될 때까지이지만, 그 지역에서만 사용할 수 있는 변수입니다. 전역 변수의 수명과 지역 변수의 강건성을 모두 유지한 개념입니다. 만약 해당 함수를 반복적으로 호출하면서, 그 값은 유지해야할 땐 전역 변수보단 정적 변수를 사용하는 것이 좋습니다.

변수는 어떤 지역 내에서 만들면 지역 변수로 만들어지고, 아무 지역도 아닌 곳(=자동 실행 스레드)에서 만들면 전역 변수로 만들어진다고 했습니다. 그렇다면 정적 변수는 어떻게 만들어야할까요? 바로 static이라는 특별한 키워드를 이용하여 만들어야합니다.

static 키워드

static 키워드는 global 키워드와 마찬가지로 정적 변수로 생성하고자 하는 변수 앞에 붙여줍니다. 또한 해당 지역 내에서만 사용할 수 있다고 했으므로, 블록 내에서 만들어야 함은 당연합니다.

아래 예시는 정적 변수의 사용을 잘 보여줍니다.

1F1::
2{
3 static var := 1
4 MsgBox(var)
5 var++
6}
정적 변수의 사용

위 코드 조각을 실행하면 처음엔 초깃값인 1부터 출력하는데, 블록이 끝나기 전에 var++ 구문을 통해 변수의 값을 증가시킵니다. 계속해서 F1키를 눌러보면 값이 1씩 증가하면서 출력되는 것을 볼 수 있죠. 지역이 끝나도 var 변수가 소멸되지 않고, 그 값이 유지되는 것을 볼 수 있습니다.

이렇게 정적 변수를 적절히 사용하면 예쁜 코드를 작성할 수 있습니다(적어도 전역 변수를 가득 써놓은 코드보단 말이죠!). 물론 이곳저곳 여러 지역에서 사용한다면 전역 변수를 사용하는게 좋을 수 있지만, 한 지역에서만 사용하면서 지역이 끝나도 값을 소멸시키지 않으려면 정적 변수를 사용하는 것이 좋습니다.

전역 변수의 남용

변수의 세 가지 유효 범위를 보시고 의문이 생길 수 있습니다.

그러면 모든 곳에서 제약없이 쓸 수 있는 전역 변수만 사용하면 되는 것 아닌가요?

매력적인 선택지입니다. 이렇게하면 변수의 소멸 기한이나 사용 범위에 대해 고려할 필요가 없어보입니다. 그렇지만 이는 피해야할 방법입니다.

여러 이유가 있지만, 대표적으로 코드의 강건성이 떨어진다는 것입니다. 어디서나 접근할 수 있는 전역 변수는 어디서나 값이 바뀔 수 있습니다. 잠재적으로 모든 지역에서 해당 변수를 가져오거나 값을 수정할 수 있고, 따라서 해당 변수는 언제든지 값이 변할 위험에 노출되어있습니다.

인간은 컴퓨터처럼 완벽하지 않습니다. 원치 않게 전역 변수의 값을 변경시키는 코드를 사용하곤 합니다. 코드가 길어질수록, 프로그램의 규모가 커질수록 이러한 실수는 잦아집니다.

전역 변수를 사용하면 좋은 경우도 물론 있습니다. 여러 지역에서 공통적으로 사용해야 하는 변수는 전역 변수인 편이 좋습니다. 전역 변수의 사용을 금지하는 것은 아니니, '기본적으로 지역 변수의 사용을 원칙으로 하되, 필요시 전역 변수외 정적 변수를 사용한다.' 라고 생각하시면 되겠습니다.

정리: 어떤 종류의 변수를 사용할까?

기본적으로 지역 변수의 사용을 원칙으로 하되, 필요시 전역 변수와 정적 변수를 사용한다!

열심히 달렸으니 다음 강은 조금 쉬운 내용을 준비했습니다. 부담없이 공부해주세요.

질문하러 가기