프날 오토핫키 강좌  v2

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

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

54. 참조와 역참조


이번 강은 지루한 이론입니다. 그러나 더욱 진화된 함수를 만들기 위해 꼭 필요한 내용이니 반드시 이해해주시길 바랍니다.

변수와 주소

변수의 값은 컴퓨터 어딘가에 저장되어있을 것입니다. 그러니까 우리가 원할 때 자유롭게 변수를 사용할 수 있는 것이지요. 여기까진 유추 가능한 사실입니다.

변수를 포함하여 프로그램 실행 중 생긴 모든 '기억할 것'은 컴퓨터의 '주기억장치'에 저장됩니다. 흔히 RAM 혹은 메모리라고 부릅니다. 변수의 값은 메모리 어딘가에 저장되어 있기 때문에, 우리가 변수를 사용하면 그 메모리에 저장된 내용을 읽습니다.

이제 주소에 관한 이야기를 드려야겠네요. 메모리에 저장된 변수는 각자 '주소'를 가지고 있습니다. 말 그대로 아주 넓은 메모리 공간에서 값이 어디에 저장되어있는지 정확히 알 수 있는 주소 말입니다. 일단은 이렇게만 알고 넘어가도록 합시다.

참조

어떤 변수 var가 값을 갖고 있으며 메모리 어딘가에 저장되어있다고 합시다. 그런데, 그 변수를 가리키는 또다른 변수 ref를 만들 수 있으며, 이를 "변수 ref가 변수 var를 참조한다"라고 말합니다. 결국 varref는 본질적으로 같은 변수입니다. refvar의 별칭인 셈이죠.

각 상자 안에 여러 변수의 값이 있는데, var = 10이라고 적혀있는 곳에서 ref가 화살표로 var를 가리키고 있는 모습 사진 1. ref가 var를 참조하는 모습

변수는 참조 연산자(&)를 통해 참조할 수 있습니다.

1var := 2
2ref := &var
ref가 var를 참조하는 예시

&var와 같이 변수 앞에 참조 연산자를 붙이면 참조 형식(VarRef)이 만들어집니다. 당연히 &var를 대입한 ref는 참조 형식입니다. 그러므로, 위의 코드에서 refvar를 참조합니다.

이로써 var를 참조하는 변수인 ref를 만들었습니다. 차이가 있다면 var는 숫자가 담긴 일반적인 변수지만, refvar를 참조하는 참조 형식의 변수라는 점입니다.

역참조

참조 형식의 변수는 값을 직접 가진 것이 아니라, 다른 변수의 위치를 참조하고 있을 뿐입니다. 따라서 참조하고 있는 변수를 직접 사용할 수 없습니다. 참조하고 있는 변수에 접근하려면 '역참조'라는 과정이 필요합니다.

참조 형식의 변수는 역참조 연산자(%)를 통해 역참조할 수 있습니다. 이 연산자는 역참조할 변수를 감싸는 형태로 사용합니다.

1var := 2
2ref := &var
3MsgBox(%ref%)
참조 형식의 변수(ref)를 역참조하여 값을 읽는 예시

위 코드는 var를 참조하고 있는 ref를 역참조합니다. 결국, %ref%var와 완전히 동일합니다. 당연히 아래와 같이 대입도 가능합니다.

1var := 2
2ref := &var
3%ref% := 50
역참조된 변수에 값을 대입

Tip: 참조를 말하는 여러 어휘

'참조 형식'을 단순히 '참조'라고도 부릅니다.

따라서, "변수 ref는 참조이다" 역시 맞는 어휘입니다. 응용하여 "refvar에 대한 참조이다" 는 refvar를 참조한다는 뜻이죠. 사실 이 편이 더욱 잘 쓰이는 용어입니다.

도대체 참조를 왜 쓸까요? 그 이유는 함수의 매개변수 전달에 참조 형식을 이용하는 경우가 있기 때문입니다. 다음 강에서 그 방법과 효과를 배우겠습니다.

질문하러 가기