#16StructuralHard

Flyweight Pattern

Flyweight Pattern

같은 "내재 상태(intrinsic)"를 가진 객체는 공유해서 메모리를 절약하는 flyweight 팩토리를 구현하세요.

API

export interface Glyph {
  readonly char: string;
  readonly font: string;
  readonly size: number;
}

export class GlyphFactory {
  get(char: string, font: string, size: number): Glyph;
  size(): number;          // 현재 캐시된 flyweight 개수
  clear(): void;           // 캐시 초기화
}

동작

  • 같은 (char, font, size) 조합에 대해 항상 같은 인스턴스를 반환
  • 다른 조합은 새 인스턴스 생성
  • size()는 지금까지 만든 고유 flyweight 수
  • clear() 후 다시 같은 조합을 요청하면 새 인스턴스 (캐시 비워졌으므로)

학습 포인트

  • intrinsic state(공유 가능, 변하지 않음) vs extrinsic state(매번 다름)을 분리
  • 같은 intrinsic 조합에 대한 객체를 캐싱해서 메모리 폭발 방지
  • 게임의 글자/타일/입자, 텍스트 렌더링, 아이콘 등에 활용
언어: