프날 오토핫키 강좌  v2

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

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

27. 함수의 반환값


이번에는 함수의 반환값을 배워보겠습니다.

함수의 본질

뜬금없이 함수의 본질에 대해 언급하는 이유는 함수에 반환값이 있는 이유를 납득시키기 위해서입니다. 이렇게 본질을 파악하면 우리가 배운 함수의 개념을 조금 더 명확히하여 나중에 헷갈릴 일이 없도록 해줍니다.

학창 시절 수학 시간에 함수를 배워본 적 있을 것입니다. 주로 아래와 같은 형식으로 표현되곤 했죠.

y = 2x + 3

갑자기 수학이 나오다니! 머리가 아프실 수 있지만 더이상 어렵게 하진 않겠습니다. 아무튼, 위 함수는 일차함수로서 y가 2x + 3을 나타냅니다.

우리가 x에 1, 2, 3, 4...를 넣어보면 y의 값은 각각 5, 7, 9, 11...이 됩니다. 프로그래밍을 배우려는 것이므로 당장 계산해야 하는 것은 아닙니다. 중요한 것은, 무언가 입력(x:input)이 있다면 출력(y:output)이 있다는 것이죠.

프로그래밍에서의 함수도 마찬가지입니다. 우리가 어떤 입력을 주면, 무언가 작업을 열심히 해서 출력을 뱉어내는 구조를 함수라고 합니다. 여기서 '입력'을 인수로, '출력'은 반환값으로 부릅니다. 인수를 전달하여 함수를 호출하는 작업은 해보았죠?

함수 작업이라고 적힌 상자 위쪽의 구멍으로 인수를 넣어, 상자 아래의 구멍으로 반환값이 나오는 모습 2x + 3 = y라고 적힌 상자 위쪽의 구멍으로 3과 2가 적힌 구슬을 넣어, 상자 아래의 9와 7이 적힌 구슬이 나오는 모습
사진 1~2. 수학의 함수와 프로그래밍에서의 함수는 구조적으로 같습니다.

우리는 지금까지 "함수는 무언가 일을 한다" 라고만 알고 있었습니다. MsgBox를 사용하면 알림 상자를 화면에 출력하는 작업만 해줬죠. 그러나 함수는 (필요한 경우) 그 일의 결과 또한 반환해줍니다. 우리는 MsgBox를 사용하면서 함수의 반환값을 사용한 적은 없습니다.

함수의 반환값

함수를 함수명(인수)처럼 호출하면, 그 호출부는 작업을 마친 후 결괏값을 가집니다. 우리는 이 과정을 '함수가 값을 반환했다'라고 부를 것입니다.

즉, 함수는 작업을 마친 후 결괏값을 반환합니다. 그 값을 알아보기 위해 대입 연산자를 사용해서 변수에 반환값을 담아볼 수 있습니다.

1var := MsgBox("Hello")
2MsgBox(var)
MsgBox 함수의 반환값을 변수로 받아 출력

MsgBox 함수도 값을 반환합니다. 위 예제와 같이 사용하면, MsgBox가 실행된 후 적절한 값이 반환되어 var변수에 담길 것입니다. 어떤 값이 담기는지 실행해볼까요?

Hello라고 적힌 알림 상자의 모습 OK라고 적힌 알림 상자의 모습
사진 3~4. 첫 번째 메시지박스(Hello)와, 그 반환값(OK)을 출력

알림 상자가 열려있는 동안은 코드 진행이 멈춘다는 점은 이미 말씀드렸죠? 첫 번째 알림 상자를 닫으면 이어서 두 번째 알림 상자가 열립니다. 두 번재 알림 상자에는 '사진 4'와 같이 OK라고 출력이 될 것입니다.

눈치채신 분도 계시겠지만, MsgBox의 반환값은 사용자가 누른 버튼입니다. MsgBox 강좌에서 나왔던 표를 기억하시나요?

버튼의 종류문자열
확인 (기본값)0OK 또는 O
확인취소1OKCancel 또는 O/C 또는 OC
중단다시 시도무시2AbortRetryIgnore 또는 A/R/I 또는 ARI
아니요취소3YesNoCancel 또는 Y/N/C 또는 YNC
아니요4YesNo 또는 Y/N 또는 YN
다시 시도취소5RetryCancel 또는 R/C 또는 RC
취소다시 시도계속6CancelTryAgainContinue 또는 C/T/C 또는 CTC
표 1. MsgBox의 버튼의 종류 별로 적어주어야 하는 옵션

이 표에서 각 버튼의 영문명을 확인할 수 있는데, '확인' 버튼은 OK, '취소'는 Cancel 등 각 버튼의 영문명이 반환된다는 것을 알 수 있습니다. 우리는 '확인' 버튼을 눌렀기 때문에 OK 라는 반환값이 var 변수에 담겨 출력되었던 것이죠.

그렇다면 아래와 같은 경우는 어떨까요?

1var := MsgBox("Press any button", "Title", "Y/N")
2MsgBox("Selected button: " var)
예제 2. 사용자의 선택을 출력

이미 배우셨듯이, MsgBox의 Options 매개변수로 "Y/N"을 전달해주면 아니요 버튼이 있는 알림 상자를 만들 수 있습니다. 알림 상자의 를 누르면 Yes가 출력되고, 아니요를 누르면 No가 출력되는 것을 볼 수 있습니다.

이제 MsgBox에서 반환값을 받아 출력하는 방법을 익히셨나요? 다른 함수도 마찬가지입니다. 함수 호출부에 대입 연산자를 통해 반환값을 변수에 담을 수 있죠.

물론, 아래와 같이 대입하지 않고 바로 사용할 수도 있습니다.

1MsgBox(CookRamyeon(Param))
예제 3. 한 줄로 사용자의 선택을 출력

위 코드는 CookRamyeon(Param)의 반환값이 출력되겠죠?

반환값을 쓰는 이유

MsgBox의 예시를 보았다싶이, 함수를 호출하면 그 호출문으로 값이 반환되어옵니다. 따라서 우리는 반환값을 변수로 받아서 추후에 사용할 수 있습니다.

함수마다 다르지만, 어떤 함수는 실행한 결과를 반환해줍니다. 앞으로는 내장 함수를 강좌할 때 그 반환값을 제가 같이 알려드리도록 하겠습니다. 어떤 값이 반환되는지 알면 여러 동작을 할 수 있습니다.

정리: 함수의 반환값

1. 함수의 호출부는 작업을 마친 후 결괏값을 가지는데, 이를 '함수가 값을 반환한다'라고 한다.
2. 필요한 경우, 함수는 그 실행 결과를 반환한다.
3. 예를 들어서 MsgBox는 사용자가 선택한 버튼이 무엇인지를 반환한다.

다음 강은 '반복문'에 대해 배우겠습니다.

질문하러 가기