⚠ 이 강좌는 오토핫키 v1을 다룹니다
지금 보시는 강좌는 구버전 오토핫키(v1.1)를 다루고 있습니다. 따라서 본 강좌의 내용은 현재 최신 오토핫키 버전 (v2.0)과 호환되지 않습니다. 구버전의 정보가 필요한 것이 아니라면, 가능한 한 새로운 사이트에 작성한 v2 강좌(https://ahkv2.pnal.dev)를 봐주시길 바랍니다.
[프날 오토핫키] 배열 #3: 단순 배열
1. 전통식과 표현식의 차이를 정확히 아셔야 이해가 원활합니다. 그렇지 않으면 다양한 상황에서 배열을 적용하기가 어렵습니다. 서론에도 언급한 내용이지만, 본격적인 배열 강좌가 시작되었으므로 한번 더 언급드립니다.
단순 배열
이번엔 단순 배열(Simple Arrays)입니다. 기존의 '가짜 배열'의 형태를 진짜 배열의 형태로 쓴 것을 말하는데, 가짜 배열과 유사하게 1, 2, 3번의 순서를 가지고 있습니다. 이제부터 진짜 배열이기 때문에 배열과 관련된 문법을 아셔야합니다. 이번 강에선 단순 배열을 이용하여 배열을 선언하고 사용하는 방법부터 알아보도록 하겠습니다. 또한, 배열에 쓸 수 있는 각종 함수 또한 알아보도록 하겠습니다.
1. 선언
단순 배열은 가장 단순한 형태의 배열입니다. 오토핫키에서 배열을 사용하기 위해선 선언 과정이 먼저 이루어져야 하는데, 아래와 같이 대입 연산자를 사용하여 단순 배열을 선언할 수 있습니다.
array := []
이 구문은 array라는 이름의 배열을 선언하는 구문인데, 여는 대괄호를 써준 후 닫는 대괄호를 곧바로 써주었습니다. 이제 이 배열에 값을 하나씩 넣을 수 있습니다.
배열을 설명하는덴 그림만한게 없죠. 원래 배열은 아래와 같이 수량이 정해져있는 자료 구조입니다.
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
위 표와 같이 배열은 컴퓨터 상에서 순차적으로 연결된 기차 모양을 띠고 있고, 10칸이면 10칸, 100칸이면 100칸과 같이 연결된 항목의 수가 정해져 있습니다. 그러나 오토핫키의 배열은 편리하게 쓸 수 있도록 수량을 정하지 않아도 쓸 수 있습니다. 필요한만큼 오토핫키가 늘려서 쓰고 그러기 때문에, 배열을 선언할 땐 배열의 크기가 들어가지 않습니다.
2. 할당 (인덱스와 요소 설명)
프로그래밍에서 순서를 매길 때 쓰는 숫자를 '인덱스'라고 부릅니다. 반복문도 순서를 셀 수 있기 때문에 A_index라는 내장변수에 인덱스가 담겨있는 것이고, 단순 배열 또한 이런 인덱스를 이용하여 각 항목에 접근할 수 있습니다.
배열에서 각 항목을 '요소'라고 부릅니다. 단순 배열에서 인덱스와 요소는 일대일 대응 되겠지요. 예를 들어서 1번 인덱스의 요소는 "가", 2번 인덱스의 요소는 "나"일수가 있습니다.
인덱스: 순번
요소: 배열의 항목
오토핫키는 인덱스가 1부터 시작하는 언어이고, 따라서 배열의 첫번째 인덱스에 어떤 요소를 할당하려면 아래와 같이 쓰면 됩니다.
array[1] := 값
일반적인 변수 대입과 똑같죠? 차이가 있다면 배열의 몇 번째 항목에 해당 값을 넣을지 인덱스를 표시해주었다는 것입니다. 이 대괄호([]) 또한 연산자의 한 종류인데, '배열 인덱스 연산자' 혹은 '첨자 연산자' 라고 합니다. 두 대괄호 사이에 인덱스를 넣어주면, 배열의 해당 인덱스에 접근할 수 있습니다. array[10]은 10번째 요소를 가리키겠죠.
선언과 동시에 할당할 수도 있습니다. 배열에 여러 항목을 한 번에 할당할 땐 콤마(,)를 이용하는데, 콤마를 써서 아래와 같이 선언과 동시에 할당하는 방법이 있습니다.
arr := [2, 4, 6, 8, 10]
arr[1]은 2, arr[2]는 4, arr[3]은 6의 값을 가지게 될 것입니다. arr[4]와 arr[5]또한 각각 8, 10의 값을 가질 것입니다. 아직까지는 쉽죠? MsgBox로 출력해봅시다. 이전 강에서 언급했듯, 배열은 표현식에서 쓸 수 있는 문법이기 때문에 (퍼센트 기호 + 공백)으로 표현식 처리를 해준 후 사용할 수 있습니다.
arr := [2, 4, 6, 8, 10]
MsgBox, % "배열의 첫번째 요소: " arr[1] ", 배열의 두번째 요소: " arr[2]
표현식에서 문자열은 따옴표로 써주고, 이외엔 그냥 써주는 것 알고 계시죠? (이래서 제가 표현식, 전통식 개념을 정확히 알고 배열을 공부해야한다는 것입니다.) 위 예시에서 볼 수 있듯 문자열만 따옴표로 감싸주었습니다. 문자열과 다른 요소 사이엔 무조건 1칸 이상의 띄어쓰기가 있어야합니다. 사실 이 예제가 표현식의 가장 기본적이자 결정적인 예시라고 할 수 있겠네요.
잠시 다른 길로 샜는데, 이런 식으로 배열을 써줄 수 있습니다. 아무튼 배열은 표현식 문법이기 때문에, 항목이 문자열이라면 아래와 같이 따옴표 처리를 해서 할당해주어야합니다.
var := 123
arr := ["문자열1", "문자열2", var, 123]
여러 유형의 값을 넣어보았는데, 문자열에는 따옴표 표시를 해주었음을 알 수 있습니다. 또한 세 번째 항목은 var변수를 이용한게 보이시죠? 변수는 표현식에서 %표시를 하지 않습니다. 따라서 그냥 써주었습니다. 네 번째 항목의 숫자도 역시 그냥 써주었습니다.
[]는 연산자이기 때문에 그 사이는 당연히 표현식입니다. 애초에 배열은 전부 표현식 문법이라고 했죠. 그러니까 아래와 같이 변수가 들어갈 수도 있겠네요.
index := 3
MsgBox, % arr[index]
이를 이용하여 단순 배열을 순차탐색 해보겠습니다. Loop를 이용하여 말이지요! 길이가 5인 배열을 순차적으로 탐색해본 후, 배열 안에 있는 숫자의 총 합을 구하는 스크립트를 준비해보았습니다.
arr := ["가나다", 10, "라마바", 38, 89]
Loop, 5
{
sum += arr[A_index]
}
MsgBox, % sum
감이 오시나요? 그럼 간단한 문제 하나 올리고 단순 배열 강좌를 마치겠습니다.
arr := [1, 2, 4, 5, 6, 7, 8, 9]
배열에 값을 입력했는데, 세 번째 요소부터 값이 1씩 밀렸네요. 3, 4, 5...처럼 대입되어야하는데, 3을 깜빡하고 4부터 넣은 모양새가 되었습니다.
반복문을 이용해서 3번째 요소부터 8번째 요소를 3~8로 수정해보세요. 정답은 스크립트로 제공합니다.