# RunService

RunService : `Instance`

## Overview

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

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

## Properties

## Methods

### IsClient

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

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

#### Parameters

#### Return

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

#### Code Samples

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

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

### IsServer

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

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

#### Parameters

#### Return

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

#### Code Samples

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

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

### IsStudio

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

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

#### Parameters

#### Return

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

#### 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)
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.overdare.com/korean/development/api-reference/classes/runservice.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
