ETC/Auto Hotkey

AutoHotkey, 이제 'If-Else If-Else'로 더 스마트하게!

shimdh 2025. 10. 26. 11:32
728x90

프로그래밍에서 스크립트의 흐름을 제어하는 것은 매우 중요합니다. 특히 AutoHotkey와 같은 스크립팅 언어에서는 키보드 단축키, 자동화 작업, 시스템 제어 등 실생활 문제를 해결하는 데 필수적입니다. 오늘은 스크립트 내에서 의사 결정을 내리는 데 핵심적인 'else'와 'else if' 문에 대해 깊이 있게 알아보겠습니다. 이 조건문들은 여러분의 AutoHotkey 스크립트를 훨씬 더 강력하고 유연하게 만들어 줄 것입니다. 초보자부터 중급자까지, 이 가이드를 통해 코드의 논리 흐름을 마스터하세요!

728x90

조건문의 기본: 'If' 문

모든 조건문의 시작은 'if' 문입니다. 'if' 문은 특정 조건이 참(true)으로 평가될 때만 해당 코드 블록을 실행합니다. 이는 스크립트의 가장 기본적인 분기 처리 방식입니다.

if (condition) {
    ; 조건이 참일 경우 실행될 코드
    MsgBox, 조건이 맞아요!
}

간단하죠? 하지만 실제 프로젝트에서는 하나의 조건으로 모든 시나리오를 다루기 어렵습니다. 예를 들어, 사용자 입력이 예상치 못한 값을 가질 때 대안을 마련해야 하죠. 이때 'else'와 'else if'가 등장합니다. 이들은 'if'의 한계를 넘어 다중 조건을 처리하며, 코드를 더 직관적으로 만듭니다.

'Else'와 'Else If'의 강력함

'Else' 문: 대안 제시

'else' 문은 초기 'if' 문의 조건이 거짓(false)으로 평가될 때 실행되는 대체 코드 블록을 정의합니다. 이는 "A가 아니면 B를 해라"라는 간단한 논리를 구현합니다.

예를 들어:

if (errorOccurred) {
    MsgBox, 오류가 발생했습니다!
} else {
    MsgBox, 모든 게 정상입니다.
}

이처럼 'else'는 스크립트의 안정성을 높여 예외 상황을 처리합니다.

'Else If' 문: 다중 조건 처리

'else if' 문은 'if' 다음에 추가 조건을 순차적으로 검사할 수 있게 해줍니다. 여러 'else if' 블록을 쌓아 올릴 수 있으며, 마지막에 'else'로 마무리할 수 있습니다. 이는 여러 상호 배타적인 조건(서로 겹치지 않는 경우)을 효율적으로 다룰 때 이상적입니다.

이 구조 덕분에 스크립트는 조건을 하나씩 검사하며, 첫 번째로 맞는 조건에서 멈추고 나머지를 건너뜁니다. 불필요한 연산을 줄여 성능을 최적화하죠.

함께 사용하는 'If-Else If-Else' 구조

이 세 가지 조건문을 결합하면 강력한 의사 결정 체인을 만들 수 있습니다. 아래는 기본 구조입니다:

if (condition1) {
    ; condition1이 참일 경우 실행될 코드
    MsgBox, 첫 번째 조건 맞음!
} else if (condition2) {
    ; condition2가 참일 경우 실행될 코드
    MsgBox, 두 번째 조건 맞음!
} else {
    ; 위 조건들이 모두 거짓일 경우 실행될 코드
    MsgBox, 기본 대응!
}

이 구조의 장점은 중첩된 'if' 문(예: if 안에 if)을 피할 수 있다는 점입니다. 코드가 평평해져 가독성이 높아지고, 디버깅도 쉬워집니다. AutoHotkey에서 이 패턴을 자주 사용하면 복잡한 자동화 스크립트도 간결하게 작성할 수 있어요.

실제 예시: 사용자 입력 유효성 검사

이론만으로는 부족하죠? AutoHotkey에서 대화 상자를 통해 사용자 입력(나이)을 검증하는 실용적인 예시를 보겠습니다. 이 스크립트는 입력된 나이를 기반으로 적절한 메시지를 출력합니다.

; 사용자에게 나이를 입력받기
InputBox, userAge, 나이를 입력하세요:, , 200, 120

; 빈 입력 처리 (추가 안전 장치)
if (userAge = "") {
    MsgBox, 입력이 비어 있습니다. 다시 시도하세요.
    return  ; 스크립트 종료
}

; 조건문으로 입력 값 검증
if (userAge < 0) {
    MsgBox, 유효한 양수를 입력하세요. (음수 불가!)
} else if (userAge < 18) {
    MsgBox, 당신은 미성년자입니다. 보호자 동의가 필요할 수 있어요.
} else if (userAge <= 65) {
    MsgBox, 당신은 성인입니다. 모든 서비스 이용 가능!
} else {
    MsgBox, 당신은 시니어 혜택을 받을 자격이 있습니다! (65세 이상)
}

이 예시의 동작 설명

  • InputBox: 사용자에게 나이를 입력받습니다. (너비 200, 높이 120으로 설정)
  • 첫 번째 if: 음수 입력 시 오류 메시지 출력. (부족한 부분 채움: 빈 입력도 별도 처리)
  • 첫 번째 else if: 18세 미만 미성년자 확인.
  • 두 번째 else if: 18~65세 성인 범주.
  • else: 65세 초과 시 시니어 혜택 안내.

이 스크립트를 실행하면 사용자의 입력에 따라 즉시 피드백을 받을 수 있습니다. 실제로 파일 다운로드 제한이나 연령 기반 콘텐츠 필터링에 적용할 수 있어요.

'Else/Else If' 사용의 이점

이 조건문을 활용하면 AutoHotkey 스크립트가 한 단계 업그레이드됩니다. 주요 이점은 다음과 같습니다:

  1. 명확성: 과도한 중첩 없이 다양한 시나리오를 정의해 코드를 체계적으로 유지합니다. 다른 개발자가 봐도 쉽게 이해할 수 있어요.
  2. 효율성: 조건이 맞으면 후속 검사를 스킵해 실행 속도를 높입니다. 특히 반복 실행되는 스크립트에서 유용합니다.
  3. 다용성: 복잡한 논리 흐름(예: 다단계 인증)을 유연하게 처리합니다. AutoHotkey의 다른 기능(키보드 훅, GUI 등)과 결합하면 무한한 가능성이 열립니다.

루프와 조건문의 결합: 더 강력한 자동화

부족한 부분을 채워보자면, 'If-Else If-Else'가 루프(Loop)와 함께 사용되면 반복 작업에서 조건을 동적으로 처리할 수 있습니다. 예를 들어, 파일 목록을 검사하며 특정 조건에 맞는 파일만 처리하는 스크립트입니다.

; 루프와 조건문 결합 예시
Loop, Files, C:\Documents\*.txt  ; Documents 폴더의 .txt 파일 반복
{
    FileGetSize, fileSize, %A_LoopFileFullPath%

    if (fileSize > 1MB) {  ; 1MB 초과 파일
        MsgBox, 큰 파일 발견: %A_LoopFileName% (%fileSize% bytes)
    } else if (fileSize > 100KB) {
        MsgBox, 중간 크기 파일: %A_LoopFileName%
    } else {
        ; 작은 파일은 무시하거나 로그
        FileAppend, 작은 파일: %A_LoopFileName%`n, log.txt
    }
}

이처럼 루프 안에서 조건문을 사용하면 "조건이 맞을 때까지 반복"하거나 "변경될 때까지 검사"하는 로직을 구현할 수 있습니다. 이는 파일 정리, 웹 스크래핑, 모니터링 스크립트에 딱 맞아요.

728x90