Flyweight Pattern

Structural Pattern

Intro

  • 효율성을 위해서 대량의 객체들간의 상태를 공유하는 것

  • 특정 클래스의 인스턴스 한 개로 여러 개의 "가상 인스턴스를 제공하고 싶은 경우" 사용하는 패턴

  • 즉, 인스턴스를 가능한 대로 공유시켜 쓸데 없이 new 연산자를 통한 메모리 낭비를 줄이는 패턴

상황

  • 어플리케이션에 의해 생성되는 객체의 수가 많은 경우

  • 생성된 객체가 오래도록 메모리에 상주하며, 사용하는 횟수가 많은 경우

  • 객체의 특성을 내적 속성(Intrinsic Properties)과 외적 속성(Extrinsic Properties)으로 나눴을 때, 객체의 외적 특성이 클라이언트 프로그램으로부터 정의되어야 한다.

플라이웨이트 패턴 장점

  • 공유 객체에 의해 메모리에 로드되는 객체의 개수를 줄일 수 있다.

플라이웨이트 패턴 단점

  • 특정 인스턴스의 공유 컴포넌트를 다르게 행동하게 하는 것이 불가능하다.

Java API

  • String pool

    • 같은 문자열에 대해 다시 사용될 때 새로운 메모리를 할당하는 것이 아니라 pool 에서 존재하면 가져오고 없는 경우 새로 메모리 핧당하여 pool에 등록

  • valueOf()

code

Last updated