안녕하세요, 자동화 애호가 여러분! 오늘은 강력한 스크립팅 도구인 오토핫키(AutoHotkey, AHK)를 다루는 데 필수적인 주제, 데이터 유형에 대해 깊이 파헤쳐보겠습니다. AHK는 단순한 키보드 매크로부터 복잡한 시스템 자동화까지 폭넓게 활용되는 도구지만, 그 진짜 매력을 발휘하려면 기반 개념을 탄탄히 다져야 합니다. 특히 데이터 유형은 스크립트가 데이터를 어떻게 저장하고 처리할지 결정짓는 '뼈대' 역할을 하죠. 이 글을 통해 데이터 유형의 본질을 이해하고, 실전 예시를 통해 바로 적용할 수 있도록 안내하겠습니다. 초보자부터 중급자까지 유용할 거예요!
왜 데이터 유형을 이해해야 할까?
프로그래밍에서 데이터 유형은 변수가 저장할 수 있는 값의 '종류'를 정의합니다. 이는 단순한 분류가 아니라, 해당 값에 적용할 수 있는 연산(예: 덧셈, 연결, 비교)과 그 결과에 직접 영향을 미칩니다. AHK처럼 동적 타입 언어에서 데이터 유형을 무시하면, 숫자를 문자열로 오인해 계산 오류가 발생하거나, 텍스트를 숫자로 처리해 의도치 않은 결과를 초래할 수 있어요.
예를 들어, "123"을 숫자로 취급하지 않으면 100 + "123" = "100123"이 되어 버립니다. 올바른 데이터 유형 선택은:
- 정확성: 스크립트가 의도대로 동작하게 함.
- 효율성: 메모리 사용 최적화와 빠른 실행.
- 안정성: 런타임 오류 방지.
결국, 데이터 유형 이해는 AHK 스크립트를 '작동하는 코드'에서 '신뢰할 수 있는 도구'로 업그레이드하는 열쇠입니다. 이제 AHK의 주요 데이터 유형을 하나씩 살펴보죠!
오토핫키의 주요 데이터 유형 한눈에 보기
AHK는 간결한 문법으로 강력한 기능을 제공하지만, 데이터 유형은 기본부터 고급까지 체계적으로 나뉩니다. 아래에서 각 유형의 특징, 예시, 활용 팁을 정리했습니다. (AHK v1 기준으로 설명하되, v2로 업그레이드 시 약간의 문법 변화가 있으니 공식 문서를 확인하세요.)
1. 숫자 (Numbers)
숫자는 수학적 연산의 기본입니다. AHK에서 숫자는 자동으로 정수나 부동 소수점으로 처리되며, 따옴표 없이 할당합니다.
- 정수 (Integers): 소수점이 없는 완전한 숫자 (예: 42, -5).
- 부동 소수점 숫자 (Floating-point Numbers): 소수점이 있는 숫자 (예: 3.14, 2.5).
예시 코드:
num1 := 42 ; 정수
num2 := 3.14 ; 부동 소수점
sum := num1 + num2
MsgBox % "합계: " . sum ; "합계: 45.14" 표시
활용 팁: 루프 카운트, 좌표 계산, 가격 산정 등에 필수. 큰 숫자 처리 시 Format() 함수로 소수점 제어하세요. 문자열로 입력된 숫자는 Number()로 변환해 오류를 피할 수 있습니다.
2. 문자열 (Strings)
문자열은 텍스트를 다루는 '만능 도구'입니다. 단/삼중 따옴표로 감싸며, 이스케이프 문자(\n 등)를 지원합니다.
예시 코드:
greeting := "Hello, World!" ; 단 따옴표 또는 이중 따옴표 사용 가능
path := "C:\Users\MyFolder\file.txt"
MsgBox % greeting
활용 팁: 파일 경로, 사용자 입력, 로그 메시지에 적합. . 연산자로 연결하거나 SubStr(), InStr()로 조작하세요. 정규 표현식(RegExMatch())과 결합하면 텍스트 파싱이 강력해집니다.
3. 부울 (Booleans)
부울은 논리 값을 나타내는 가장 간단한 유형으로, true 또는 false만 가집니다. 조건문의 기반입니다.
예시 코드:
isActive := true
if (isActive) {
MsgBox "시스템 활성화됨!"
} else {
MsgBox "시스템 비활성화됨."
}
활용 팁: 스위치 플래그(예: 파일 존재 여부), 루프 종료 조건에 사용. &&(AND), ||(OR) 연산자로 복잡한 논리를 구성하세요. 숫자 0은 false, 0이 아닌 값은 true로 암시 변환됩니다.
4. 배열 (Arrays)
AHK의 배열은 주로 '연관 배열' 형태로, 키-값 쌍을 저장합니다. (v2에서는 Array()로 명시적 생성.) 인덱스는 1부터 시작합니다.
예시 코드:
myArray := {name: "John", age: 30}
MsgBox % myArray["name"] ; "John" 표시 (또는 myArray.name)
colors := ["red", "green", "blue"] ; v1에서 일반 배열은 객체로 취급
MsgBox % colors[2] ; "green" 표시 (인덱스 1부터)
활용 팁: 목록 관리(예: 메뉴 아이템), 데이터 집합에 최적. for key, value in myArray 루프로 반복 처리하세요. 대규모 데이터 시 메모리 효율을 위해 크기 제한을 두는 게 좋습니다.
5. 객체 (Objects)
객체는 배열의 확장으로, 속성과 메서드를 포함합니다. 객체 지향 프로그래밍(OOP)의 기반이며, 재사용성을 높입니다.
예시 코드:
person := {name: "Alice", age: 25, greet: Func("SayHello")}
person.greet() ; 메서드 호출 예시 (별도 함수 정의 필요)
SayHello() {
MsgBox "안녕하세요, " . A_ThisFunc . "입니다!"
}
MsgBox % person.age ; "25" 표시
활용 팁: 클래스처럼 모델링(예: GUI 창 객체)할 때 유용. ObjAdd()로 동적 추가, ObjDelete()로 제거. 대형 스크립트에서 모듈화에 필수적입니다.
6. 정의되지 않음 (Undefined)
변수가 선언되었으나 값이 할당되지 않은 상태입니다. AHK에서 빈 변수는 빈 문자열("")로 취급되지만, 명시적 확인이 필요합니다.
예시 코드:
myVar := "" ; 초기화되지 않음
if (!myVar) {
myVar := "기본값" ; 빈 값 확인 후 할당
MsgBox % myVar ; "기본값" 표시
}
활용 팁: 초기화 오류 방지를 위해 := "" 또는 := 0으로 기본값 설정. IsObject()나 Type() 함수로 유형 검사하세요. 무시하면 Null 포인터 같은 런타임 에러가 발생할 수 있습니다.
실제 시나리오에서 데이터 유형 활용하기
이론만으로는 부족하죠? 실제 AHK 스크립트 예시를 통해 각 유형이 어떻게 빛을 발하는지 보겠습니다. 이 코드는 복사-붙여넣기만으로 바로 테스트할 수 있어요!
숫자: 쇼핑몰 할인 계산기
totalPrice := 100.0 ; 부동 소수점으로 가격 설정
discountRate := 0.15 ; 15% 할인
finalPrice := totalPrice * (1 - discountRate)
MsgBox "할인 후 최종 가격: $" . Round(finalPrice, 2) ; "할인 후 최종 가격: $85" 표시 (Round로 소수점 2자리)
숫자 유형 덕분에 정확한 곱셈이 가능합니다. 문자열로 하면 "100" * 0.15 = 오류!
문자열: 사용자 이름 형식화
firstName := "Jane"
lastName := "Doe"
fullName := firstName . " " . lastName
MsgBox "환영합니다, " . StrUpper(SubStr(fullName, 1, 1)) . Lower(fullName) ; "환영합니다, J" + "ane doe" 표시
문자열 함수(StrUpper(), Lower())로 동적 형식화. 텍스트 처리의 매력입니다.
부울: 파일 존재 확인 자동화
fileExists := FileExist("C:\important.txt")
if (fileExists) {
MsgBox "파일이 존재합니다!"
Run "notepad.exe C:\important.txt"
} else {
MsgBox "파일을 생성하세요."
}
부울로 간단히 상태 판단. AHK의 FileExist()는 자동 부울 반환!
배열: 작업 목록 관리
tasks := {urgent: "이메일 보내기", normal: "보고서 작성", low: "청소"}
for priority, task in tasks {
MsgBox priority . ": " . task ; 각 항목 순회 출력
}
키-값으로 우선순위별 작업 그룹화. 생산성 자동화에 딱!
객체: 제품 정보 클래스화
product := {make: "Toyota", model: "Corolla", year: 2020, display: Func("ShowInfo")}
product.display()
ShowInfo(this) {
MsgBox "제품: " . this.make . " " . this.model . " (" . this.year . ")"
}
메서드 포함으로 객체가 '살아 움직임'. GUI나 API 연동에 유용.
정의되지 않음: 안전한 변수 초기화
userInput := "" ; 초기화
InputBox, userInput, 입력, 이름을 입력하세요: ; 사용자 입력 대기
if (userInput = "") {
userInput := "Guest" ; 빈 값 처리
}
MsgBox "안녕, " . userInput . "!"
초기화로 크래시 방지. 실전에서 잊지 마세요!
결론: 데이터 유형, AHK 스크립팅의 초석
오토핫키 스크립트를 작성할 때 데이터 유형은 단순한 '선택'이 아니라, 스크립트의 안정성과 확장성을 좌우하는 초석입니다. 숫자는 정밀 계산에, 문자열은 유연한 텍스트 조작에, 부울은 논리 흐름 제어에, 배열과 객체는 복잡한 데이터 구조 관리에 – 각 유형이 어떻게 작동하는지 이해하면, 코드가 더 읽기 쉽고 유지보수하기 쉬워집니다. 성능도 올라가고, 디버깅 시간도 줄어요!
'ETC > Auto Hotkey' 카테고리의 다른 글
| AutoHotkey 핫키: 작업 흐름을 혁신하는 마법 같은 키보드 단축키 (0) | 2025.10.26 |
|---|---|
| 오토핫키 스크립팅, 연산자로 마스터하기: 자동화의 핵심! (0) | 2025.10.26 |
| 오토핫키 스크립팅의 심장: 변수 완전 정복 가이드 (0) | 2025.10.26 |
| 오토핫키, DLL 호출로 날개를 달다! 스크립트 확장과 자동화의 새로운 지평 (0) | 2025.10.26 |
| AutoHotkey와 COM 객체: Windows 자동화의 무한한 가능성을 열다! (0) | 2025.10.26 |