# ScriptSignal

## Overview

ScriptSignal은 게임에서 특정 상황이 발생했을 때 이를 감지하여, 해당 신호에 연결된 함수들을 자동으로 실행하는 이벤트 시스템입니다.

신호가 트리거되면 연결된 사용자 정의 함수들이 호출되며, 필요한 경우 이벤트와 관련된 정보를 매개변수로 함께 전달하여 다양한 상호작용을 유연하게 구현할 수 있도록 지원합니다.

## Constructors

## Properties

## Methods

### Connect

이벤트 발생 시 호출될 함수를 등록하며, 해당 연결 상태를 관리할 수 있는 ScriptConnection 객체를 반환합니다.

등록된 이후에는 이벤트가 트리거될 때마다 지정된 함수가 자동으로 실행되며, 반환된 연결 객체를 이용해 언제든지 이 이벤트와의 연결을 해제할 수 있습니다.

#### Parameters

| `function` func | 이벤트 신호에 연결할 사용자 정의 함수를 지정합니다. |
| --------------- | ----------------------------- |

#### Return

| `ScriptConnection` | 신호 연결을 관리하는 데 사용할 수 있는 ScriptConnection 객체입니다. |
| ------------------ | ---------------------------------------------- |

#### Code Samples

```lua
local Players = game:GetService("Players")

local function EnterPlayer(player)
    print("EnterPlayer : ", player.Name)
end
Players.PlayerAdded:Connect(EnterPlayer)
```

### Once

이벤트가 발생했을 때 실행될 함수를 단 한 번만 호출되도록 등록하며, 해당 연결 상태를 관리할 수 있는 ScriptConnection 객체를 반환합니다.

Connect와는 달리 첫 번째 이벤트가 전달되기 직전에 연결이 자동으로 해제되므로, 별도의 연결 해제 없이 단일 호출 처리에 적합한 간편한 방식입니다.

#### Parameters

| `function` func | 이벤트 신호에 연결할 사용자 정의 함수를 지정합니다. |
| --------------- | ----------------------------- |

#### Return

| `ScriptConnection` | 신호 연결을 관리하는 데 사용할 수 있는 ScriptConnection 객체입니다. |
| ------------------ | ---------------------------------------------- |

#### Code Samples

```lua
local Players = game:GetService("Players")

local function EnterPlayer(player)
    print("EnterPlayer : ", player.Name)
end
Players.PlayerAdded:Once(EnterPlayer)
```

### Wait

신호가 한 번 발생할 때까지 현재 스레드를 대기하고, 신호 발생 시 전달된 인자들을 그대로 반환합니다.

캐릭터가 준비될 때까지 기다리거나, 자식이 추가될 때까지 대기하는 등 “한 번만 기다리면 되는” 경우에 사용하는 것을 권장합니다.

#### Parameters

#### Return

|           |                                                  |
| --------- | ------------------------------------------------ |
| `Variant` | 신호가 Fire될 때 전달된 인자들입니다. 신호 종류에 따라 개수와 타입이 달라집니다. |

#### Code Samples

```lua
-- LocalScript
-- LocalScript에서 Character 생성 대기 및 Character 인스턴스 받아오기
local Players = game:GetService("Players")
local Player = Players.LocalPlayer

local Character = Player.Character or Player.CharacterAdded:Wait()


-- Script or LocalScript
-- 특정 인스턴스의 자식으로 추가되는 인스턴스 받아오기
local Workspace = game:GetService("Workspace")
local Folder = Workspace :FindFirstChild("MyFolder")
local AddedChild = Folder.ChildAdded:Wait()
```

## See also

{% content-ref url="../../../manual/script-manual/events-and-communication/event" %}
[event](https://docs.overdare.com/korean/manual/script-manual/events-and-communication/event)
{% endcontent-ref %}
