플라이웨이트 패턴이란?

동일하거나 유사한 객체들 사이에 가능한 많은 데이터를 서로 공유하여 사용하도록 하여 메모리 사용량을 최소화하는 패턴

주로 중복 생성 가능성이 높은 자원이나 자원 생성 비용은 크나 사용 빈도가 낮은 경우 사용하는 패턴이다

구조

structure.png

  • Flyweight
    공유 자원을 갖는 객체
  • ConcreateFlyweight
    Flyweight 구현체로 공유 상태에 대한 저장 공간 관리 및 확보
    • UnsharedConcreateFlyweight
      공유하지 않는 구현체
  • FlyweightFactory
    Flyweight 객체 생성 및 관리

장점

어플리케이션에 공유 자원을 갖는 객체가 많다면 자원을 절약할 수 있다.

단점

공유 자원 호출시 존재하는 데이터 검색과 같은 비용이 발생한다.

객체를 공유자원으로 다시 나눠서 구현하기에 비교적 코드가 복잡해진다.


참고