프날 오토핫키 강좌  v2

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

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

58. return의 활용법


이전에 '52. 나만의 함수 만들기'에서 return 제어문을 배웠습니다. 그땐 단순히 함수의 반환값을 지정해주는 역할로서 return을 사용해주었습니다. 함수에서 x + y를 반환하고자 한다면 return x + y를 적어준 식이었죠.

return을 적절히 쓰면 스크립트를 더욱 보기 좋게 만들 수 있습니다. 이번 강에선 return의 다른 모습을 배워보겠습니다. 이미 함수 강의에서 스치듯 언급했던 내용이기 때문에 "왜 당연한 소리를 하는거야?"라고 느껴질 수 있으니, 편하게 봐주세요.

return

사실 "값 반환"을 따지기 전에 return의 본 역할은 '복귀'입니다. 일단은 현재 지역에서 이전 지역으로 제어 흐름을 복귀시켜주는 역할인데, 쉽게 설명하면 아래와 같습니다.

현재 있는 함수를 빠져나가서 함수의 호출부로 되돌아가라!

즉 아래와 같은 코드에선 조건에 따라 함수 중간에서 return되어 그 아랫줄은 실행되지 않고 함수의 호출부로 복귀합니다.

1foo(1)
2ExitApp
3
4foo(bar)
5{
6    if (bar = 1)
7        return
8    bar += 3
9    MsgBox(bar)
10}
사실, 핫키 블록이 없기 때문에 2번 줄의 ExitApp은 없어도 무방합니다.

위의 예시에서 8번 줄의 복합 연산과 9번 줄의 MsgBox 구문은 실행되지 않습니다. 프로그램의 제어 흐름이 7번 줄의 return을 만나서 함수의 호출부로 돌아갔기 때문입니다. 위 프로그램의 진행 순서를 명시적으로 적어주면 아래와 같습니다,

1(호출) → 6 → 7(복귀) → 2(종료)

함수를 호출할 때 매개변수로 숫자 1을 전달해주었고, 함수 내의 조건문에 의해 return이 호출되어 1번 줄로 돌아간 모습입니다. 이렇듯, return함수의 실행을 중단하고 흐름을 복귀시키는 중요한 기능을 갖고 있습니다.

번외: 핫키 지역에서 return 사용

만약 핫키 지역처럼 '호출부'가 없을 때 return을 만나면 프로그램은 핫키를 대기하던 상황으로 돌아갑니다. 직접 실험해보세요. 어렵지 않을 것입니다.

조금 더 깔끔한 코드

return을 배운 김에, 조금 더 나은 코드를 작성하는 아주 쉬운 요령을 하나 알려드리겠습니다.

블록의 단계를 최소화하고, 블록의 안쪽은 최대한 짧게 만들어라!

가장 흔한 경우가 if를 사용할 때입니다. 아래의 두 함수는 같은 동작을 하는데, 한 번 비교해보세요.

1AddUser(userString)
2{
3    if (userString = "")
4        return false
5    userInfo := ParseSentense(userString)
6    userList.Push(userInfo["Name"])
7    MsgBox("사용자 추가 완료")
4    return true
8}
경우 1
1AddUser(userString)
2{
3    if (userString != "")
4    {
5        userInfo := ParseSentense(userString)
6        userList.Push(userInfo["Name"])
7        MsgBox("사용자 추가 완료")
4        return true
8    }
4    return false
9}
경우 2

두 코드는 조건문 안쪽의 조건이 다릅니다. '경우 1'은 함수를 중단할 조건인 userString = ""를 적어서 만약 조건이 성립할 때 return을 통해 함수를 벗어나주었습니다. 반면, '경우 2'는 함수를 계속 수행할 조건인 userString != ""를 적어서 조건이 성립할 때 작업을 수행하도록 했습니다.

관점에 따라 다르지만 프로그래머는 보통 블록의 단계를 줄이고, 블록 안쪽의 내용을 줄이고 싶어 합니다. 따라서 '경우 2'와 같이 코드를 작성하기 보단 '경우 1'처럼 작성하는 것이 일반적입니다.

이렇듯 return을 적절히 사용하면 더 나은 코드를 작성할 수 있습니다.

질문하러 가기