#48PerformanceMedium

데드 코드 분석기

데드 코드 분석기 (Dead Code Analyzer)

트리 셰이킹은 번들러가 사용되지 않는 export를 제거해 번들 크기를 줄이는 기법입니다. 이를 시뮬레이션하는 DeadCodeAnalyzer를 구현하세요.

모듈 그래프를 구성하고, 진입점(entry module)에서 시작해 임포트 그래프를 순회한 뒤, 한 번도 임포트되지 않은 export를 찾아냅니다.

API

interface DeadExport {
  module: string;
  exportName: string;
}

class DeadCodeAnalyzer {
  addExport(module: string, name: string): void;
  addImport(fromModule: string, toModule: string, name: string): void;
  findDead(entryModule: string): DeadExport[];
}

동작

  • 각 모듈은 여러 export를 가질 수 있습니다
  • addImport(from, to, name): from 모듈이 to 모듈의 name export를 사용
  • findDead(entry)는:
    1. entry에서 시작해 import 관계를 따라 도달 가능한 모듈을 모두 방문
    2. 방문한 모듈 집합 내에서 한 번이라도 import된 export는 "살아있음"
    3. 도달 가능한 모듈에 있지만 임포트되지 않은 export를 반환
    4. 도달 불가능한 모듈의 export도 모두 dead (entry에서 못 닿음)
  • 결과는 module 알파벳 오름차순, 동일 module 내에서는 exportName 알파벳 오름차순

학습 포인트

  • 모듈 그래프 BFS/DFS 순회
  • 도달 가능성 분석을 통한 사용 여부 판별
  • 트리 셰이킹의 정적 분석 의미론
언어: