콘텐츠로 이동

함수의 기본: 선언과 호출

함수를 만드는 과정을 '선언(Define)'이라고 하고, 만들어진 함수를 사용하는 것을 '호출(Call)'이라고 합니다. Epscript에서 함수를 어떻게 정의하고 사용하는지 알아봅시다.


1. 함수 선언하기

함수는 function 키워드를 사용하여 선언합니다. 가장 기본적인 구조는 다음과 같습니다.

function 함수이름(매개변수1, 매개변수2) {
    // 실행할 코드
}

매개변수는 함수가 작동하는 데 필요한 '상세 옵션'입니다. 똑같은 '유닛 생성' 함수라도 어떤 플레이어에게 줄지, 어떤 유닛을 줄지에 따라 결과가 달라지게 만듭니다. 클래식트리거, 정확히는 TEP 기반에서 CreateUnit(1, "Terran Marine", "Anywhere", P1); 이와 같은 CreateUnit 트리거도 함수로 볼 수 있습니다.

CreateUnit이라고 명명한 함수에 생성할 유닛의 수와 대상, 위치, 플레이어를 매개변수로 넘겨서 실행하는거죠.

📝 함수 예시

매개변수 없이 단순히 메시지를 출력하는 함수를 만들어 봅시다.

function sayHello() {
    eprintf("안녕하세요! 유즈맵 세계에 오신 것을 환영합니다.");
}

2. 매개변수(Arguments) 활용

매개변수는 함수가 실행될 때 외부에서 넣어주는 '재료'입니다. 이 재료에 따라 함수는 매번 다른 결과를 낼 수 있습니다.

예시

단순한 Set Resources를 넘어, 특정 플레이어에게 미네랄과 가스를 동시에 지급하고 알림까지 처리하는 유틸리티 함수입니다.

function giveSupport(cp, ore, gas) {
    SetResources(cp, Add, ore, Ore);
    SetResources(cp, Add, gas, Gas);

    eprintf("\x1F지원금 수령: \x04미네랄 +{}, 가스 +{}", ore, gas);
}

3. 함수 호출하기

만들어진 함수를 실제로 사용하는 것을 '호출(Call)'이라고 합니다. 함수 이름 뒤에 소괄호()를 붙이고, 선언할 때 정한 매개변수 순서대로 값을 넣어줍니다.

// 함수 호출
function onPluginStart() {
    giveSupport(P1, 500, 200); // P1에게 500/200 지급 및 메시지 출력
    giveSupport(P2, 1000, 0);  // P2에게 1000/0 지급 및 메시지 출력
}

매개변수 순서 주의

함수를 호출할 때 넣는 값의 순서는 선언할 때의 순서와 정확히 일치해야 합니다.
giveSupport(플레이어, 미네랄, 가스) 순서로 만들었다면, 호출할 때도 반드시 이 순서를 지켜야 엉뚱한 자원이 지급되는 사고를 막을 수 있습니다.

함수 이름 중복

이미 만든 함수(예: giveSupport)와 동일한 이름으로 함수를 하나 더 만들 경우, 충돌이 발생합니다.

이 문제를 해결하기 위해 import라는 개념을 사용합니다. 이는 함수들을 각자의 '방(공간)'에 가두어 관리하는 것과 같습니다.

파일을 어떻게 나누고, 어떤 식으로 다른 파일의 기능을 불러와서 효율적으로 프로젝트를 관리하는지에 대한 상세한 내용은 05. 모듈화 챕터에서 본격적으로 다룰 예정입니다.