반응형

🎯 이 글에서 배우는 것: 변수 선언, 문자열, 숫자, 배열, 객체, Map
📦 변수란?
변수는 값을 저장하는 상자입니다. 이름을 붙여서 나중에 다시 사용할 수 있죠.
name := "홍길동" ; 상자에 "홍길동" 넣기
age := 25 ; 상자에 25 넣기
MsgBox(name) ; 상자에서 꺼내서 보여주기
MsgBox(age)
📝 변수 선언과 할당
기본 할당
v2에서는 := 연산자로 값을 할당합니다:
x := 10 ; 숫자
name := "Alice" ; 문자열
isActive := true ; 불리언 (참/거짓)
⚠️ 주의:
=하나만 쓰면 비교입니다! 할당은 반드시:=
x = 10 ; ❌ 이건 비교 (x가 10과 같은가?)
x := 10 ; ✅ 이건 할당 (x에 10을 넣어라)
변수명 규칙
- 영문자, 숫자, 언더스코어(_) 사용 가능
- 숫자로 시작할 수 없음
- 대소문자 구분 안 함 (
Name과name은 같음)
myVariable := 1 ; ✅ OK
my_variable := 2 ; ✅ OK
_private := 3 ; ✅ OK
myVar2 := 4 ; ✅ OK
2ndVariable := 5 ; ❌ 숫자로 시작 불가
my-var := 6 ; ❌ 하이픈 불가
🔤 문자열 (String)
따옴표
v2에서는 큰따옴표 또는 작은따옴표 모두 사용 가능:
str1 := "Hello World"
str2 := 'Hello World'
문자열 연결
first := "Hello"
second := "World"
; 방법 1: 공백으로 연결
combined := first " " second ; "Hello World"
; 방법 2: 점(.)으로 연결
combined := first . " " . second ; "Hello World"
문자열 안에 변수 넣기
v2에서는 문자열 안에서 변수를 직접 사용할 수 없습니다:
name := "홍길동"
; ❌ 안 됨 (v1 스타일)
; MsgBox("안녕하세요, %name%님!")
; ✅ 연결 사용
MsgBox("안녕하세요, " name "님!")
특수 문자 (이스케이프)
| 표기 | 의미 |
|---|---|
`n |
줄바꿈 |
`t |
탭 |
`r |
캐리지 리턴 |
` `` |
백틱 자체 |
"" |
따옴표 안의 따옴표 |
msg := "첫 줄`n두 번째 줄"
MsgBox(msg)
quote := "그가 말했다: ""안녕!"""
MsgBox(quote) ; 그가 말했다: "안녕!"
🔢 숫자 (Number)
정수와 소수
intNum := 42 ; 정수
floatNum := 3.14159 ; 소수 (부동소수점)
negative := -100 ; 음수
기본 연산
a := 10
b := 3
sum := a + b ; 13 (덧셈)
diff := a - b ; 7 (뺄셈)
prod := a * b ; 30 (곱셈)
quot := a / b ; 3.333... (나눗셈)
intDiv := a // b ; 3 (정수 나눗셈)
remainder := Mod(a, b) ; 1 (나머지)
power := a ** 2 ; 100 (거듭제곱)
복합 할당 연산자
x := 10
x += 5 ; x = x + 5 → 15
x -= 3 ; x = x - 3 → 12
x *= 2 ; x = x * 2 → 24
x /= 4 ; x = x / 4 → 6
x++ ; x = x + 1 → 7
x-- ; x = x - 1 → 6
✅ 불리언 (Boolean)
참(true) 또는 거짓(false) 값:
isRunning := true
isFinished := false
if (isRunning)
MsgBox("실행 중!")
Truthy와 Falsy
AutoHotkey에서 거짓으로 취급되는 값:
false0""(빈 문자열)
나머지는 모두 참으로 취급됩니다.
if (0)
MsgBox("안 보임") ; 0은 false
if (1)
MsgBox("보임!") ; 1은 true
if ("")
MsgBox("안 보임") ; 빈 문자열은 false
if ("hello")
MsgBox("보임!") ; 문자열은 true
📋 배열 (Array)
여러 값을 순서대로 저장하는 목록입니다.
배열 생성
; 방법 1: 대괄호 사용
fruits := ["사과", "바나나", "오렌지"]
; 방법 2: Array() 사용
numbers := Array(1, 2, 3, 4, 5)
; 빈 배열
emptyArr := []
요소 접근
인덱스는 1부터 시작합니다 (0이 아님!):
fruits := ["사과", "바나나", "오렌지"]
MsgBox(fruits[1]) ; "사과"
MsgBox(fruits[2]) ; "바나나"
MsgBox(fruits[3]) ; "오렌지"
; 마지막 요소
MsgBox(fruits[-1]) ; "오렌지" (음수 인덱스!)
배열 수정
fruits := ["사과", "바나나"]
fruits[1] := "딸기" ; 수정
fruits.Push("오렌지") ; 끝에 추가
fruits.InsertAt(2, "포도") ; 2번 위치에 삽입
lastItem := fruits.Pop() ; 마지막 요소 제거하고 반환
fruits.RemoveAt(1) ; 1번 요소 제거
배열 속성과 메서드
fruits := ["사과", "바나나", "오렌지"]
MsgBox(fruits.Length) ; 3 (길이)
fruits.Has(2) ; true (2번 인덱스 존재?)
배열 순회
fruits := ["사과", "바나나", "오렌지"]
; for 루프 (인덱스와 값)
for index, fruit in fruits
MsgBox(index ": " fruit)
; Loop로 순회
Loop fruits.Length
MsgBox(fruits[A_Index])
🗂️ Map (연관 배열)
키-값 쌍으로 데이터를 저장합니다. 다른 언어의 Dictionary나 HashMap과 비슷해요.
Map 생성
; 방법 1
person := Map("name", "홍길동", "age", 25)
; 방법 2
person := Map()
person["name"] := "홍길동"
person["age"] := 25
값 접근
person := Map("name", "홍길동", "age", 25)
MsgBox(person["name"]) ; "홍길동"
MsgBox(person["age"]) ; 25
Map 수정
person := Map()
person["name"] := "홍길동"
person["job"] := "개발자"
person.Delete("job") ; 키 삭제
person.Clear() ; 전체 삭제
Map 순회
person := Map("name", "홍길동", "age", 25, "city", "서울")
for key, value in person
MsgBox(key ": " value)
Map vs Array 언제 쓸까?
| 상황 | 추천 |
|---|---|
| 순서가 있는 목록 | Array |
| 이름으로 접근하고 싶을 때 | Map |
| 파일 목록, 사용자 목록 | Array |
| 설정값, 사용자 정보 | Map |
🧱 객체 (Object)
속성(property)을 가진 데이터 구조입니다.
객체 생성
; 중괄호 사용
person := {name: "홍길동", age: 25, city: "서울"}
; 빈 객체
obj := {}
obj.name := "홍길동"
obj.age := 25
속성 접근
person := {name: "홍길동", age: 25}
; 점 표기법
MsgBox(person.name)
; 대괄호 표기법 (동적 접근)
propName := "name"
MsgBox(person.%propName%)
객체 순회
person := {name: "홍길동", age: 25}
for prop in person.OwnProps()
MsgBox(prop ": " person.%prop%)
🔄 타입 확인과 변환
타입 확인
x := 42
y := "hello"
z := [1, 2, 3]
MsgBox(Type(x)) ; "Integer"
MsgBox(Type(y)) ; "String"
MsgBox(Type(z)) ; "Array"
타입 변환
; 문자열 → 숫자
num := Integer("42") ; 42
num := Float("3.14") ; 3.14
num := Number("123") ; 123 (자동 판단)
; 숫자 → 문자열
str := String(42) ; "42"
🌐 내장 변수
AutoHotkey는 유용한 내장 변수들을 제공합니다:
시스템 정보
MsgBox(A_UserName) ; 현재 사용자명
MsgBox(A_ComputerName) ; 컴퓨터 이름
MsgBox(A_Desktop) ; 바탕화면 경로
MsgBox(A_MyDocuments) ; 문서 폴더 경로
MsgBox(A_Temp) ; 임시 폴더 경로
날짜/시간
MsgBox(A_Now) ; 현재 날짜시간 (YYYYMMDDHH24MISS)
MsgBox(A_YYYY) ; 연도 (4자리)
MsgBox(A_MM) ; 월 (01-12)
MsgBox(A_DD) ; 일 (01-31)
MsgBox(A_Hour) ; 시 (00-23)
MsgBox(A_Min) ; 분 (00-59)
스크립트 정보
MsgBox(A_ScriptDir) ; 스크립트 폴더 경로
MsgBox(A_ScriptName) ; 스크립트 파일명
MsgBox(A_LineNumber) ; 현재 줄 번호
🎮 실습 과제
- 이름, 나이, 도시를 저장하는 Map 만들기
- 좋아하는 음식 5개를 배열에 저장하고 출력
- 현재 날짜를 "2024년 01월 15일" 형식으로 출력
정답 보기 👀
#Requires AutoHotkey v2.0
; 1. Map
person := Map("name", "홍길동", "age", 25, "city", "서울")
for key, value in person
MsgBox(key ": " value)
; 2. 배열
foods := ["피자", "치킨", "햄버거", "파스타", "초밥"]
for index, food in foods
MsgBox(index "번째: " food)
; 3. 날짜
MsgBox(A_YYYY "년 " A_MM "월 " A_DD "일")
📚 다음 시간 예고
다음 글에서는 제어문을 배웁니다:
- if/else 조건문
- Loop, While, For 반복문
- Break, Continue
프로그램의 흐름을 제어해봅시다! 🔀
🔑 오늘 배운 핵심 정리
| 타입 | 예제 | 설명 |
|---|---|---|
| 문자열 | "Hello" |
텍스트 |
| 정수 | 42 |
정수 |
| 소수 | 3.14 |
부동소수점 |
| 불리언 | true/false |
참/거짓 |
| 배열 | [1, 2, 3] |
순서 있는 목록 |
| Map | Map("a", 1) |
키-값 쌍 |
| 객체 | {name: "홍길동"} |
속성 모음 |
이전 글: [#6 프로그램 실행과 창 관리]
다음 글: [#8 제어문 - if/else와 반복문]
반응형
'🔬 과학·테크 > 🔥 AutoHotkey v2 입문 가이드' 카테고리의 다른 글
| AutoHotkey v2 입문 가이드 #9: 함수 기초 - 코드 재사용의 마법 (0) | 2025.12.12 |
|---|---|
| AutoHotkey v2 입문 가이드 #8: 제어문 - if/else, Loop, While, For (0) | 2025.12.11 |
| AutoHotkey v2 입문 가이드 #6: 프로그램 실행과 창 관리 - Run, WinActivate, WinWait (0) | 2025.12.09 |
| AutoHotkey v2 입문 가이드 #5: 키보드/마우스 입력 보내기 - Send, Click, MouseMove (0) | 2025.12.08 |
| AutoHotkey v2 입문 가이드 #4: 핫스트링(Hotstring) - 타이핑의 마법 (1) | 2025.12.07 |