배치 스크립트 - 함수
안녕하세요, 야심 찬 프로그래머 여러분! 오늘은 배치 스크립팅의 fascinante 세계로 안내해 드릴 것입니다. 여러분의 친절한 이웃 컴퓨터 교사로서, 이 여정을 안내해 드리는 것을 기대하고 있습니다. 그럼 마음에 드는 음료를 한 잔 마시고, 시작해 보겠습니다!
함수는 무엇인가요?
정밀한 내용에 뛰어들기 전에, 함수가 무엇인지 이해해 보겠습니다. 함수는 스크립트 속 작은 도우미라고 생각해 보세요. 주 프로그램 내에 있는 작은 프로그램처럼 특정 작업을 수행합니다. 친구에게 특정 일을 도와달라고 부르는 것처럼, 이 함수들을 호출하여 스크립트 내에서 특정 작업을 수행할 수 있습니다.
함수 정의
이제 이러한 유용한 작은 친구들을 만드는 방법을 배워보겠습니다. 배치 스크립팅에서는 레이블을 사용하여 함수를 정의합니다. 다음은 기본 구조입니다:
:functionName
REM 함수 코드가 여기에 들어갑니다
REM ...
REM ...
goto :eof
이를 구성해 보겠습니다:
-
:functionName
은 함수의 시작을 표시하는 레이블입니다. - 레이블 다음의 줄에는 실제 함수 코드가 들어갑니다.
-
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
변수를 설정하며, 이를 주 스크립트에서 사용할 수 있습니다.
함수 내 지역 변수
함수에서 작업할 때, 주 스크립트의 변수와의 충돌을 피하기 위해 지역 변수를 사용하는 것이 좋습니다. setlocal
과 endlocal
명령어를 사용할 수 있습니다:
@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
은 함수가 끝나면 원래 값을 유지합니다.
함수 라이브러리
스크립트가 더 복잡해지면서, 여러 스크립트에서 동일한 함수를 사용해야 할 수 있습니다. 이 경우, 함수를 복사하고 붙여넣는 대신 함수 라이브러리를 만들 수 있습니다:
- 새 파일을 만들어, 예를 들어
myFunctions.bat
라고 합니다. - 자주 사용하는 함수를 이 파일에 넣습니다.
- 주 스크립트에서 함수를 사용하기 전에 이 파일을
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