> For the complete documentation index, see [llms.txt](https://docs.overdare.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.overdare.com/korean/development/api-reference/classes/bindablefunction.md).

# BindableFunction

BindableFunction : `Instance`

## Overview

BindableFunction은 클라이언트 간 또는 서버 간, 즉 같은 종류의 스크립트 간 요청과 응답 처리를 위해 제공되는 객체로, 동기 양방향 통신을 지원합니다.

Invoke를 호출한 스크립트는 OnInvoke에 설정된 함수가 값을 반환할 때까지 일시 중단(yield)되며, 반환값은 여러 개를 동시에 받을 수 있습니다.

OnInvoke에 설정된 함수에서 오류가 발생하면 해당 오류는 Invoke를 호출한 쪽으로 전파됩니다.

클라이언트와 서버간 통신이 필요한 경우 RemoteFunction을 사용해야 합니다.

반환값을 받을 필요가 없는 통신에는 BindableEvent를 사용하는 것이 더 적합합니다. Invoke는 호출한 스크립트를 일시 중단시키기 때문입니다.

## Properties

### OnInvoke

`Value`

Invoke 메서드가 호출될 때 실행할 함수를 지정하는 속성입니다.

이벤트가 아니므로 Connect()가 아닌 대입 연산으로 설정하며, 하나의 함수만 설정할 수 있습니다. 자세한 동작과 주의사항은 Callback 항목의 OnInvoke을 참고하세요.

#### Code Samples

## Methods

### Invoke

BindableFunction의 OnInvoke에 설정된 함수를 실행하고, 그 반환값을 그대로 돌려주는 메서드입니다.

OnInvoke에 함수가 설정되어 있지 않은 상태에서 이 메서드를 호출하면, 오류나 시간 초과 없이 호출한 스크립트가 재개되지 않습니다. 호출보다 OnInvoke 설정이 먼저 완료되도록 초기화 순서를 구성해야 합니다.

OnInvoke에 설정된 함수에서 오류가 발생하면 해당 오류가 호출한 쪽으로 전파되므로, pcall()로 감싸 처리할 수 있습니다.

동일한 BindableFunction에 대한 호출이 동시에 발생하면, 설정된 함수가 각각 실행됩니다.

#### Parameters

| `any` ... | <p>OnInvoke에 설정된 함수로 전달되는 인자입니다.</p><ul><li>number, boolean, string, table 등 Luau의 기본 자료형을 전달할 수 있습니다.</li><li>Instance 같은 객체도 전달할 수 있습니다.</li><li>모든 데이터 타입이 완전히 지원되는 것은 아니기 때문에, 사용 전 실제 동작을 확인해보는 것이 좋습니다.</li><li>table은 복사본으로 전달되므로, 설정된 함수가 인자로 받은 table을 수정해도 호출한 쪽의 원본은 변경되지 않습니다.</li><li>table의 키는 string으로 통일하는 것이 안전합니다. 배열 원소와 이름을 지정한 필드를 함께 담으면 이름을 지정한 필드가 전달되지 않습니다.</li></ul> |
| --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

#### Return

| `Tuple` | <p>OnInvoke에 설정된 함수가 반환한 값입니다.</p><ul><li>여러 개의 값을 동시에 반환받을 수 있습니다.</li><li>설정된 함수에 return이 없는 경우 nil을 반환받습니다.</li></ul> |
| ------- | ------------------------------------------------------------------------------------------------------------------------ |

#### Code Samples

```lua
-- Script1 (or LocalScript1)
local ServerScriptService = game:GetService("ServerScriptService")
local BindableFunction = ServerScriptService:WaitForChild("BindableFunction")

local function SomeFunction(number)
    return number * 2, number > 0
end
BindableFunction.OnInvoke = SomeFunction


-----------------------------------------------------------------------------------
-- Script2 (or LocalScript2)
local ServerScriptService = game:GetService("ServerScriptService")
local BindableFunction = ServerScriptService:WaitForChild("BindableFunction")

local SomeNumber = 10
local Result, IsPositive = BindableFunction:Invoke(SomeNumber) -- Passing arguments
print("[Invoke]", "Result : ", Result, " / IsPositive : ", IsPositive)
```

## Events

## Callback

### OnInvoke

BindableFunction 인스턴스에서 Invoke 메서드가 호출되면 OnInvoke에 설정된 함수가 실행되며, 호출 시 전달된 인자는 설정된 함수로 그대로 전달됩니다.

OnInvoke는 이벤트가 아니라 함수를 담는 프로퍼티이므로 Connect()를 사용할 수 없으며, 대입 연산으로 설정합니다.

**주의사항**

* 하나의 함수만 설정할 수 있으며, 여러 번 설정한 경우 **마지막에 설정한 함수**만 실행됩니다.
* 함수가 아닌 값을 설정해도 설정 시점에는 오류가 발생하지 않습니다. Invoke를 호출하는 시점에 오류가 발생합니다.
* 함수가 실행되는 도중 OnInvoke를 다른 함수로 변경하면, 이미 진행 중인 호출은 변경 전 함수로 완료되고 이후의 새로운 호출부터 변경된 함수가 사용됩니다.
* 설정된 함수 안에서 오래 대기하면 Invoke를 호출한 쪽도 그만큼 함께 대기합니다.

#### Parameters

| `Tuple` Arguments | <p>Invoke 메서드 호출 시 전달된 인자입니다.</p><ul><li>table로 받은 인자는 복사본이므로, 이 함수에서 수정해도 호출한 쪽의 원본에는 반영되지 않습니다.</li><li>호출한 쪽에 값을 돌려주려면 반드시 return으로 반환해야 합니다.</li></ul> |
| ----------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |

#### Return

| `Tuple` | <p>Invoke를 호출한 쪽으로 전달할 반환값입니다.</p><ul><li>여러 개의 값을 동시에 반환할 수 있습니다.</li><li>return을 작성하지 않으면 호출한 쪽은 nil을 받습니다.</li></ul> |
| ------- | ----------------------------------------------------------------------------------------------------------------------- |

#### Code Samples

```lua
local ServerScriptService = game:GetService("ServerScriptService")
local BindableFunction = ServerScriptService:WaitForChild("BindableFunction")

local function SomeFunction(number)
    return number * 2, number > 0
end
BindableFunction.OnInvoke = SomeFunction -- Connect가 아닌 대입으로 설정
```

## See also

{% content-ref url="/pages/ptRKYzEEsawEyvh6kskm" %}
[같은 환경 내 통신](/korean/manual/script-manual/events-and-communication/bindableevent.md)
{% endcontent-ref %}
