📖 WIPIVERSE

🔍 현재 등록된 정보: 68,337건

플라이웨이트 패턴

플라이웨이트 패턴 (Flyweight Pattern) 은 소프트웨어 디자인 패턴 중 하나로, 다수의 객체가 공유할 수 있는 데이터를 활용하여 메모리 사용량을 줄이는 데 목적을 둔다. 특히, 유사한 객체를 대량으로 생성해야 하는 상황에서 효율적인 메모리 관리를 위해 사용된다.

플라이웨이트 패턴은 객체의 상태를 내부 상태(intrinsic state)와 외부 상태(extrinsic state)로 구분한다. 내부 상태는 객체 간에 공유될 수 있는 불변의 데이터이며, 플라이웨이트 객체 내부에 저장된다. 외부 상태는 객체마다 달라지는 가변의 데이터로, 클라이언트에서 플라이웨이트 객체에 전달되어 사용된다.

플라이웨이트 패턴을 적용하면, 동일한 내부 상태를 가진 객체들을 하나의 플라이웨이트 객체로 공유함으로써 메모리 사용량을 획기적으로 줄일 수 있다. 플라이웨이트 팩토리(Flyweight Factory)는 플라이웨이트 객체를 관리하며, 클라이언트의 요청에 따라 기존의 플라이웨이트 객체를 반환하거나, 필요한 경우 새로운 플라이웨이트 객체를 생성한다.

플라이웨이트 패턴의 구성 요소:

  • 플라이웨이트 (Flyweight): 공유될 객체의 인터페이스를 정의한다.
  • 구체적인 플라이웨이트 (Concrete Flyweight): 플라이웨이트 인터페이스를 구현하며, 내부 상태를 저장한다.
  • 플라이웨이트 팩토리 (Flyweight Factory): 플라이웨이트 객체를 생성하고 관리하며, 클라이언트에게 공유된 플라이웨이트 객체를 제공한다.
  • 클라이언트 (Client): 플라이웨이트 객체를 사용하며, 외부 상태를 플라이웨이트 객체에 전달한다.

플라이웨이트 패턴의 장점:

  • 메모리 사용량 감소: 객체 공유를 통해 메모리 사용량을 줄일 수 있다.
  • 성능 향상: 객체 생성 및 관리 비용을 줄여 성능을 향상시킬 수 있다.

플라이웨이트 패턴의 단점:

  • 복잡성 증가: 패턴 적용으로 인해 코드 구조가 복잡해질 수 있다.
  • 상태 관리의 어려움: 외부 상태를 클라이언트에서 관리해야 하므로, 상태 관리가 어려워질 수 있다.

활용 예시:

  • 텍스트 에디터: 폰트, 스타일 등의 내부 상태를 공유하고, 글자 위치, 색상 등의 외부 상태를 클라이언트에서 관리한다.
  • 게임: 캐릭터 모델, 배경 이미지 등의 내부 상태를 공유하고, 캐릭터 위치, 움직임 등의 외부 상태를 클라이언트에서 관리한다.

플라이웨이트 패턴은 메모리 사용량을 최적화해야 하는 상황에서 유용하게 사용될 수 있는 디자인 패턴이다. 하지만, 패턴 적용으로 인해 코드 복잡성이 증가할 수 있으므로, 신중하게 고려하여 적용해야 한다.