11. 플라이급 패턴(Flyweight Pattern)

11.1 개요

  프로그램에서 개체가 많아지면 메모리가 많이 차지하게 됩니다. 이럴 때 메모리 효율을 높일 필요성이 있다면 무엇을 해야 할까요? 플라이급 패턴은 이러한 문제를 해결하기 위한 하나의 방법입니다. 플라이급 패턴은 개체의 멤버 필드 중에 각 개체가 반드시 갖고 있어야 할 멤버와 여러 개체가 공유해서 사용할 수 있는 멤버로 분리하는 작업에서부터 출발합니다. 공유해서 사용할 수 있는 멤버가 가질 수 있는 상태의 종류가 개체의 수보다 상대적으로 적다면 플라이급 패턴을 사용하여 메모리 효율을 높일 수 있습니다. 

플라이급 패턴에서는 공유해서 사용할 수 있는 상태들을 공유 풀에 형성합니다. 그리고 각 개체는 특정 상태를 참조합니다. 만약, 개체의 수가 상태의 수보다 상대적으로 많다고 한다면 개체마다 상태를 갖는 것보다 공유 풀에 있는 상태를 참조하는 것이 메모리 효율이 높겠죠.

“개체의 상태를 공유 풀에 형성하여 메모리 절약하는 플라이급 패턴”

 

11. 2 시나리오

최근 들어 혁재는 여행을 다니며 사진을 찍는 것보다 사진을 바로잡는 것에 심취되어 있습니다. 그리고 조금씩 영상 처리에 관련된 프로그램을 작성하는 것에 관심을 두게 되었습니다. 덕분에 저와 혁재는 대화시간이 많이 늘어났고 친구처럼 지내게 되었습니다. 어제는 저에게 자신이 프로그램을 만들면서 해결하지 못하고 있는 것에 대한 질문을 하더군요. 

“아빠, 이번에 사진들을 관리하는 프로그램을 하나 만들고 있어요. 사진마다 어떤 Body와 어떤 렌즈를 사용했는지, 어떠한 조명에서 찍은 것인지 등을 알 수 있게 하려고요. 그런데 하다 보니 사진이 많아지면 너무 많은 메모리가 차지하게 되는 것 같아요.” 

저는 잔잔한 미소를 지으며 책꽂이에서 ‘Escort GoF의 디자인 패턴’을 꺼내어 플라이급 패턴에 대해 살펴보라고 얘기를 해 주었습니다. 그리고 다음 날 혁재가 저에게 한마디 하더군요. 

“아빠! 다이어트~”


11. 플라이급 패턴(Flyweight Pattern) 설계

11. 플라이급 패턴(Flyweight Pattern) 구현