# RunService

RunService : `Instance`

## Overview

RunService를 사용하면 프레임 단위의 반복 루프 이벤트를 활용해 로직을 처리하거나, 현재 실행 중인 환경이 서버인지 스튜디오인지 등을 판별할 수 있습니다.

실행 환경을 확인하는 기능은 특히 클라이언트와 서버 양쪽에서 공유되는 ModuleScript에서 환경에 따라 다른 동작을 구현해야 할 때 유용하게 사용할 수 있습니다.

## Properties

## Methods

### IsClient

메서드를 호출한 코드가 클라이언트 환경에서 실행 중인지 여부를 반환합니다.

LocalScript 또는 LocalScript에 의해 로드된 ModuleScript에서 호출된 경우, true를 반환합니다.

#### Parameters

#### Return

| `bool` | 클라이언트 환경에서 실행 중인지 여부입니다. |
| ------ | ------------------------ |

#### Code Samples

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

local IsClient = RunService:IsClient()
print("IsClient : ", IsClient)
```

### IsServer

메서드를 호출한 코드가 서버 환경에서 실행 중인지 여부를 반환합니다.

서버 측의 Script 또는 Script에 의해 로드된 ModuleScript에서 호출된 경우, true를 반환합니다.

#### Parameters

#### Return

| `bool` | 서버 환경에서 실행 중인지 여부입니다. |
| ------ | --------------------- |

#### Code Samples

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

local IsServer = RunService:IsServer()
print("IsServer : ", IsServer)
```

### IsStudio

현재 클라이언트가 스튜디오 환경에서 실행 중인지 여부를 반환합니다.

Studio에서만 동작해야 하는 테스트용 코드를 조건부로 실행할 때 유용하게 사용할 수 있습니다.

#### Parameters

#### Return

| `bool` | 스튜디오 환경에서 실행 중인지 여부입니다. |
| ------ | ----------------------- |

#### Code Samples

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

local IsStudio = RunService:IsStudio()
print("IsStudio : ", IsStudio)
```

## Events

### Heartbeat

물리 시뮬레이션 완료된 후에, 매 프레임의 마지막 단계 마다 호출되는 이벤트입니다.

스크립트의일반적인 실행 시점으로, task.delay나 task.spawn 등을 통해 예약된 스크립트도 이 시점에 함께 처리됩니다.

체력 회복이나 타이머 갱신처럼 주기적으로 실행해야 하는 로직에 적합한 이벤트입니다.

#### Parameters

| `number` deltaTime | <p>직전 프레임부터 현재 프레임까지 흐른 시간으로, 단위는 초입니다.<br>프레임 간 시간 간격을 기반으로 한 계산에 활용할 수 있습니다.</p> |
| ------------------ | ---------------------------------------------------------------------------------- |

#### Code Samples

```lua
local RunService = game:GetService("RunService")
local Timer = 0

local function UpdateEvent(deltaTime)
    Timer = Timer + deltaTime
    print(Timer)
end
RunService.Heartbeat:Connect(UpdateEvent)
```

### RenderStepped

화면에 프레임이 그려지기 전에, 매 프레임 마다 호출되는 이벤트입니다.

#### Parameters

| `number` deltaTime | <p>직전 프레임부터 현재 프레임까지 흐른 시간으로, 단위는 초입니다.<br>프레임 간 시간 간격을 기반으로 한 계산에 활용할 수 있습니다.</p> |
| ------------------ | ---------------------------------------------------------------------------------- |

#### Code Samples

```lua
local RunService = game:GetService("RunService")
local Timer = 0

local function OnRenderStepped(deltaTime)
    Timer = Timer + deltaTime
    print(Timer)
end
RunService.RenderStepped:Connect(OnRenderStepped)
```

### Stepped

물리 시뮬레이션이 시작되기 전에, 매 프레임 마다 호출되는 이벤트입니다.

#### Parameters

| `number` time      | RunService가 시작된 이후 경과된 시간으로, 단위는 초입니다.                                             |
| ------------------ | ---------------------------------------------------------------------------------- |
| `number` deltaTime | <p>직전 프레임부터 현재 프레임까지 흐른 시간으로, 단위는 초입니다.<br>프레임 간 시간 간격을 기반으로 한 계산에 활용할 수 있습니다.</p> |

#### Code Samples

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

local function OnStepped(timeElapsed, deltaTime)
    print(timeElapsed)
end
RunService.Stepped:Connect(OnStepped)
```
