Skip to content

Lifecycle Events

Provider는 선택적으로 lifecycle 인터페이스를 구현하여 초기화, 윈도우 연결, 정리 시점에 동작을 정의할 수 있다. 모든 lifecycle 메서드는 등록 순서대로 호출된다.

실행 순서

resolveAll()       → 모든 provider 인스턴스 생성
initAll()          → OnInit.onInit() 호출
createMainWindow() → OnMainWindowCreate.onMainWindowCreate() 호출
attachWindowAll()  → OnWindowAttach.onWindowAttach() 호출
                   → IPC 핸들러 등록
disposeAll()       → OnDispose.onDispose() 호출 (윈도우 closed 시)

각 단계에서 에러가 발생하면 onError 콜백이 호출되고, 나머지 provider의 lifecycle은 계속 실행된다. 단, OnMainWindowCreate는 구현체가 정확히 하나여야 하며 0개 또는 2개 이상이면 부트스트랩이 실패한다.

OnInit

윈도우 생성 에 호출된다. 설정 로드, 데이터베이스 연결 등 초기화 작업에 사용한다.

ts
import { Injectable, type OnInit } from '@repo/electron-ipc';

@Injectable()
class DatabaseService implements OnInit {
  private db!: Database;

  onInit() {
    this.db = new Database('./app.db');
  }
}

OnMainWindowCreate

메인 BrowserWindow를 생성하고 반환한다. 앱 전체에서 정확히 하나의 provider만 구현해야 한다. onInit 이후, onWindowAttach 이전에 호출된다.

ts
import { Injectable, type OnMainWindowCreate } from '@repo/electron-ipc';
import { BrowserWindow } from 'electron';

@Injectable()
class WindowService implements OnMainWindowCreate {
  onMainWindowCreate(): BrowserWindow {
    return new BrowserWindow({
      width: 1200,
      height: 800,
      webPreferences: { preload, contextIsolation: true },
    });
  }
}

프레임워크는 이 메서드가 반환한 윈도우를 이후 OnWindowAttach, forward 구독, OnDispose 등에 전파한다.

OnWindowAttach

윈도우 생성 호출된다. 윈도우 참조가 필요한 작업에 사용한다.

ts
import { Injectable, type OnWindowAttach } from '@repo/electron-ipc';
import type { BrowserWindow } from 'electron';

@Injectable()
class TrayService implements OnWindowAttach {
  onWindowAttach(window: BrowserWindow) {
    // 트레이 아이콘 클릭 시 윈도우 토글
  }
}

OnDispose

윈도우 closed 이벤트 시 호출된다. 리소스 정리에 사용한다.

ts
import { Injectable, type OnDispose } from '@repo/electron-ipc';

@Injectable()
class DatabaseService implements OnDispose {
  onDispose() {
    this.db.close();
  }
}

다음 단계