프날 오토핫키 강좌  v2

⚠ 이 강좌는 오토핫키 v2를 다룹니다

지금 보시는 강좌는 과거 오랜 시간동안 알려진 오토핫키(v1.1)의 차세대 버전인 오토핫키 v2를 다루고 있습니다.
만약 구버전인 '오토핫키 v1.1'의 강좌를 찾으신다면 프날 오토핫키 강좌(https://pnal.kr)를 봐주시면 되지만, 새로 오토핫키를 배우신다면 v2 버전을 배우시는 것을 강력히 추천드립니다.

32. 제어문 이모저모


머리도 식힐 겸, 조건문과 반복문에 관련된 여러 재미있는 이야기를 준비했습니다.

제어문

보셨다싶이 반복문과 조건문은 코드의 흐름을 바꿉니다. 곧대로 내려가던 코드 흐름이 거꾸로 올라가 반복되거나, 특정 부분은 건너뛰기도 하죠.

즉, 코드는 '순차 진행' 뿐만 아니라 '반복 실행'과 '조건 분기'도 합니다.

이렇게 기존 순차 진행되던 코드의 흐름을 변경하는 구문을 제어문(Control statements)이라고 합니다. 한마디로, 반복문과 조건문은 제어문이라고 할 수 있습니다.

Tip: 흐름 제어문? 제어 흐름문? 제어문?

현재 대한민국에선 조건문과 반복문처럼 코드의 진행을 변경하는 문장을 일컫는 용어로서 흐름 제어문, 제어 흐름문, 제어문이 혼용되고 있습니다.

'흐름 제어'는 본디 네트워크 분야에서 사용되는 용어이며 일반적인 코드 수행 순서를 제어하는 행위를 일컫는 말이 아닙니다. 반면 '제어 흐름'은 조건문과 반복문처럼 프로그램 코드의 진행을 말하는 용어로서, '정보통신용어사전', '우리말샘'의 뜻을 보면 (우리가 원하는) 프로그램 진행에 관련된 용어임을 알 수 있습니다. 따라서 우리가 써야할 용어는 '흐름 제어'가 아닌 '제어 흐름'입니다.

그러나 우리말 조어 습관에 따라 '흐름 제어문'은 '코드의 흐름을 제어하니까 흐름 제어문'이라고 읽힐 수 있는 반면, '제어 흐름문'은 어떻게 이해하기 힘든 조어이긴 합니다. '제어 흐름'이라는 용어를 모르면 엉뚱한 단어가 되기 때문입니다. 그렇다고 전혀 다른 뜻인 '흐름 제어'를 사용하여 '흐름 제어문'을 쓸 수는 없습니다.

따라서 '정보통신용어사전', '우리말샘'의 경우엔 '흐름'을 삭제하여, 제어문이라는 단어를 소개하고 있습니다. 이곳 강좌에서는 혼동을 줄이기 위해 '제어문'이라는 용어를 사용할 것입니다.

사족이지만 이 용어, 영어권에서도 '흐름 제어문'과 혼용되나봅니다. IBM 문서에서는 'Flow control statements(흐름 제어문)'로 소개하기 때문입니다. 다행히(?) 다른 프로그래밍 언어 공식 문서에서는 'Control flow statements(제어 흐름문)'가 압도적으로 자주 쓰입니다.

블록의 생략

제어문에서, 블록 안의 내용이 한 줄일 경우 그 블록의 중괄호 표시는 생략할 수 있습니다.

1if (조건)
2{
3 ;조건이 참일 때 할 내용 (한 줄)
4}
5else if (조건)
6{
7 ;조건이 참일 때 할 내용 (한 줄)
8}
9else
10{
11 ;조건이 참일 때 할 내용 (한 줄)
12}

따라서 위 코드는 아래처럼 쓸 수 있습니다.

1if (조건)
2 ;조건이 참일 때 할 내용 (한 줄)
3else if (조건)
4 ;조건이 참일 때 할 내용 (한 줄)
5else
6 ;조건이 참일 때 할 내용 (한 줄)

훨씬 깔끔하죠? 반복문도 마찬가지로 그 반복 내용이 한 줄일 경우 중괄호를 생략할 수 있습니다.

1Loop 횟수
2 ;반복할 내용 (한 줄)

앞으로는 강좌에서 제어문 블록 안의 내용이 한 줄일 경우 블록을 생략하도록 하겠습니다.

else if의 유래

else if는 아래와 같은 구문이 줄어들은 것입니다.

1if (조건)
2{
3 ;조건이 참일 때 할 내용
4}
5else
6{
7 if (조건)
8 {
9 ;조건이 참일 때 할 내용
10 }
11}

5번 줄의 else와 7번 줄의 if가 보이시나요? 이 부분이 축약되어 else if로 쓰던 것이 굳어진 것입니다. 물론 오토핫키 코드에서 유래된 것은 당연히 아닙니다. 수십년 전 원시적인 언어에서부터 쓰이던 테크닉이 굳어진 것입니다.

실제로 위 코드는 아래와 같이 else if를 사용한 경우와 기능상으로 완전히 동일합니다.

1if (조건)
2{
3 ;조건이 참일 때 할 내용
4}
5else if (조건)
6{
7 ;조건이 참일 때 할 내용
8}

블록의 단계가 과도하게 깊숙하면 좋지 않으니, 위와 같이 else if를 사용해야합니다.

표기 관례

함수와 다르게, Loop를 제외한 제어문은 관례적으로 소문자로 시작하여 적습니다.

BreakContinueIfElse ifElseSwitchCaseDefault가 아니라, breakcontinueifelse ifelseswitchcasedefault로 씁니다.

물론 오토핫키가 대소문자를 구문하진 않지만, 관습을 따르는 것이 혼동을 줄이겠죠?

이번 강은 제어문에 관한 여러 이야기를 해보았습니다. 다음 강에서는 제어문을 이용한 이론 및 프로그래밍 문제를 풀어보도록 하겠습니다.

질문하러 가기