# 수명 주기

- Human documentation: [https://docs.univer.ai/ko-KR/guides/sheets/getting-started/lifecycle](https://docs.univer.ai/ko-KR/guides/sheets/getting-started/lifecycle)

- Agent Markdown: [https://docs.univer.ai/ko-KR/guides/sheets/getting-started/lifecycle.md](https://docs.univer.ai/ko-KR/guides/sheets/getting-started/lifecycle.md)

- Requested language: `ko-KR`

- Content language: `ko-KR`

- Documentation version: `1.0.4`

- Source: [sheets/getting-started/lifecycle.ko-KR.mdx](https://github.com/dream-num/documentation/blob/dev/content/guides/sheets/getting-started/lifecycle.ko-KR.mdx)

---

## 전역 수명 주기

* **Starting**: 초기화 중이며 업무 단위는 아직 없습니다.
* **Ready**: 첫 업무 단위가 생성되었습니다. 추가 생성은 다시 발생시키지 않습니다.
* **Rendered**: 표준 UI의 최초 렌더링 전환 완료. 모든 비동기 콘텐츠의 준비를 보장하지 않습니다.
* **Steady**: 표준 UI가 Rendered 이후 지연 진입합니다. 모든 비동기 작업 완료를 기다리지 않습니다.

### Facade API

```typescript
const currentStage = univerAPI.getCurrentLifecycleStage()

const disposable = univerAPI.addEvent(univerAPI.Event.LifeCycleChanged, ({ stage }) => {
  console.log(stage)
})
```

> [!WARNING: 이벤트가 알리는 대상]
> `LifeCycleChanged`는 Univer의 전역 단계를 알립니다. 예를 들어 전역 `Ready` 이후 B를 로드하면 B의 `onReady()`는 호출되지만 전역 `Ready` 이벤트가 다시 발생하지는 않습니다.
> 
> 리스너를 추가할 때 콜백이 `Starting`을 포함한 현재 단계를 즉시 받을 수 있습니다. 현재 단계만 확인하려면 `univerAPI.getCurrentLifecycleStage()`를 직접 호출하세요.

리스너를 제거하려면 반환된 `disposable` 객체를 사용합니다.

```typescript
disposable.dispose()
```

## 플러그인 수명 주기 훅

플러그인은 로드될 때 `onStarting()`을 실행하고 현재 전역 단계까지 따라잡습니다. B의 로드 단계를 선택하여 A와 호출 순서를 비교하세요.



범용 플러그인은 등록 시, 업무 유형 플러그인은 보통 해당 유형의 첫 단위 생성 전에 로드됩니다. 이미 시작된 유형에 추가한 플러그인은 지연 후 일괄 로드됩니다. 명시한 의존 관계로 더 일찍 로드될 수도 있습니다.

각 배치는 의존 순서와 단계 순서에 따라 동기적으로 훅을 호출하며 비동기 작업은 기다리지 않습니다. 단위, DOM, 리소스의 준비 상태는 개별적으로 확인하세요.
