ETC/Auto Hotkey

오토핫키(AHK) 스크립트 작성의 핵심: 데이터 유형 완벽 이해하기

shimdh 2025. 10. 26. 20:08
728x90

안녕하세요, 자동화 애호가 여러분! 오늘은 강력한 스크립팅 도구인 오토핫키(AutoHotkey, AHK)를 다루는 데 필수적인 주제, 데이터 유형에 대해 깊이 파헤쳐보겠습니다. AHK는 단순한 키보드 매크로부터 복잡한 시스템 자동화까지 폭넓게 활용되는 도구지만, 그 진짜 매력을 발휘하려면 기반 개념을 탄탄히 다져야 합니다. 특히 데이터 유형은 스크립트가 데이터를 어떻게 저장하고 처리할지 결정짓는 '뼈대' 역할을 하죠. 이 글을 통해 데이터 유형의 본질을 이해하고, 실전 예시를 통해 바로 적용할 수 있도록 안내하겠습니다. 초보자부터 중급자까지 유용할 거예요!

728x90

왜 데이터 유형을 이해해야 할까?

프로그래밍에서 데이터 유형은 변수가 저장할 수 있는 값의 '종류'를 정의합니다. 이는 단순한 분류가 아니라, 해당 값에 적용할 수 있는 연산(예: 덧셈, 연결, 비교)과 그 결과에 직접 영향을 미칩니다. 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 스크립팅의 초석

오토핫키 스크립트를 작성할 때 데이터 유형은 단순한 '선택'이 아니라, 스크립트의 안정성과 확장성을 좌우하는 초석입니다. 숫자는 정밀 계산에, 문자열은 유연한 텍스트 조작에, 부울은 논리 흐름 제어에, 배열과 객체는 복잡한 데이터 구조 관리에 – 각 유형이 어떻게 작동하는지 이해하면, 코드가 더 읽기 쉽고 유지보수하기 쉬워집니다. 성능도 올라가고, 디버깅 시간도 줄어요!

728x90