배치 스크립트 - 함수

안녕하세요, 야심 찬 프로그래머 여러분! 오늘은 배치 스크립팅의 fascinante 세계로 안내해 드릴 것입니다. 여러분의 친절한 이웃 컴퓨터 교사로서, 이 여정을 안내해 드리는 것을 기대하고 있습니다. 그럼 마음에 드는 음료를 한 잔 마시고, 시작해 보겠습니다!

Batch Script - Functions

함수는 무엇인가요?

정밀한 내용에 뛰어들기 전에, 함수가 무엇인지 이해해 보겠습니다. 함수는 스크립트 속 작은 도우미라고 생각해 보세요. 주 프로그램 내에 있는 작은 프로그램처럼 특정 작업을 수행합니다. 친구에게 특정 일을 도와달라고 부르는 것처럼, 이 함수들을 호출하여 스크립트 내에서 특정 작업을 수행할 수 있습니다.

함수 정의

이제 이러한 유용한 작은 친구들을 만드는 방법을 배워보겠습니다. 배치 스크립팅에서는 레이블을 사용하여 함수를 정의합니다. 다음은 기본 구조입니다:

:functionName
REM 함수 코드가 여기에 들어갑니다
REM ...
REM ...
goto :eof

이를 구성해 보겠습니다:

  1. :functionName은 함수의 시작을 표시하는 레이블입니다.
  2. 레이블 다음의 줄에는 실제 함수 코드가 들어갑니다.
  3. goto :eof은 스크립트가 파일의 끝으로 이동하도록 지시하여, 함수를 종료합니다.

간단한 예제를 보겠습니다:

:sayHello
echo Hello, World!
goto :eof

이 함수는 호출될 때 "Hello, World!"를 콘솔에 출력합니다.

함수 호출

이제 함수를 만들었으니, 어떻게 사용할까요? call 명령어를 사용합니다. 다음은 그 방법입니다:

@echo off
call :sayHello
pause

:sayHello
echo Hello, World!
goto :eof

이 스크립트를 실행하면 다음과 같은 출력이 나타납니다:

Hello, World!
Press any key to continue . . .

call 명령어는 스크립트가 sayHello 함수를 실행하도록 지시합니다.

함수의 매개변수

함수는 정보를 전달할 수 있을 때 더욱 강력해집니다. 이러한 정보를 매개변수라고 합니다. sayHello 함수를 수정하여 특정 사람을 환영하는 예제를 보겠습니다:

@echo off
call :sayHello John
pause

:sayHello
echo Hello, %~1!
goto :eof

출력:

Hello, John!
Press any key to continue . . .

이 예제에서 %~1은 함수에 전달된 첫 번째 매개변수를 나타냅니다. sayHello John을 호출할 때 "John"이 첫 번째 매개변수가 됩니다.

다중 매개변수 함수

여러 개의 매개변수를 함수에 전달할 수 있습니다. 두 수를 더하는 함수를 만들어 보겠습니다:

@echo off
call :addNumbers 5 3
pause

:addNumbers
set /a result=%~1 + %~2
echo The sum of %~1 and %~2 is %result%
goto :eof

출력:

The sum of 5 and 3 is 8
Press any key to continue . . .

여기서 %~1은 첫 번째 매개변수(5), %~2는 두 번째 매개변수(3)를 나타냅니다.

함수에서 값 반환

배치 스크립팅에서는 함수가 전통적인 의미에서 값을 반환하지 않습니다. 그러나 환경 변수를 사용하여 이를 시仿할 수 있습니다:

@echo off
call :multiply 6 7
echo The result is %result%
pause

:multiply
set /a result=%~1 * %~2
goto :eof

출력:

The result is 42
Press any key to continue . . .

이 예제에서 multiply 함수는 result 변수를 설정하며, 이를 주 스크립트에서 사용할 수 있습니다.

함수 내 지역 변수

함수에서 작업할 때, 주 스크립트의 변수와의 충돌을 피하기 위해 지역 변수를 사용하는 것이 좋습니다. setlocalendlocal 명령어를 사용할 수 있습니다:

@echo off
set globalVar=I'm global
call :localVarDemo
echo After function call: %globalVar%
pause

:localVarDemo
setlocal
set globalVar=I'm local
echo Inside function: %globalVar%
endlocal
goto :eof

출력:

Inside function: I'm local
After function call: I'm global
Press any key to continue . . .

setlocal 명령어는 함수에 새로운 환경을 만들고, endlocal은 함수가 끝나면 원래 값을 유지합니다.

함수 라이브러리

스크립트가 더 복잡해지면서, 여러 스크립트에서 동일한 함수를 사용해야 할 수 있습니다. 이 경우, 함수를 복사하고 붙여넣는 대신 함수 라이브러리를 만들 수 있습니다:

  1. 새 파일을 만들어, 예를 들어 myFunctions.bat라고 합니다.
  2. 자주 사용하는 함수를 이 파일에 넣습니다.
  3. 주 스크립트에서 함수를 사용하기 전에 이 파일을 call 명령어로 실행합니다.

myFunctions.bat:

:sayHello
echo Hello, %~1!
goto :eof

:addNumbers
set /a result=%~1 + %~2
goto :eof

mainScript.bat:

@echo off
call myFunctions.bat

call :sayHello World
call :addNumbers 10 20
echo The sum is %result%
pause

이 접근 방식은 코드를 정리하고 재사용할 수 있게 합니다.

일반 함수 메서드

다음은 배치 스크립팅에서 일반적으로 사용되는 함수 관련 메서드 표입니다:

메서드 설명
call 함수 호출
goto :eof 함수 종료
%~1, %~2, 등 함수 매개변수 접근
setlocal 지역 환경 생성
endlocal 지역 환경 종료

기억하시기 바랍니다, 연습이 완벽을 만듭니다! 이 개념들을 실험해 보세요. 자신만의 함수를 만들고, 매개변수를 놀아보며 무엇을 만들 수 있는지 확인해 보세요. 얼마 지나지 않아 복잡한 배치 스크립트를 쉽게 작성할 수 있을 것입니다!

미래의 프로그래머 여러분, 행복하게 코딩하세요!

Credits: Image by storyset