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

11. 3 디자인

 플라이급 패턴을 설명하기 위한 예제 프로그램은 사진 파일을 관리하는 프로그램으로 할게요. 사진 파일에는 촬영할 때의 Body, 렌즈, 조명에 대한 정보를 갖고 있게 할 것입니다. 이처럼 사진의 촬영 정보들은 Meta 형식으로 정의하고 MetaPool에서 관리합니다.

새로운 조건에서 찍은 사진은 MetaPool 개체에게 촬영 조건에 해당하는 Meta개체를 요청하여 참조합니다. MetaPool은 관리하는 Meta 개체 중에 같은 조건인 개체가 있는지를 확인합니다. 만약, 있다면 해당 개체를 반환하고 없을 때만 Meta 개체를 생성하여 반환합니다. 물론, 생성한 Meat 개체는 내부 컬렉션에 보관합니다. 즉, 각 사진마다 별도의 Meta 개체를 소유하는 개념이 아니고 Meta 개체들을 관리하는 MetaPool을 통해 Meta 개체를 참조하는 형태입니다. 

이처럼 사진 파일마다 Meta 개체를 소유하지 않고 MetaPool을 통해 Meta 개체를 참조하는 형태로 프로그램을 작성하면 각 사진 파일마다 Meta 개체를 소유하는 것보다 메모리 효율을 높일 수 있습니다.

플라이급 패턴 클래스 다이어그램
플라이급 패턴 클래스 다이어그램

 

[그림 12] 플라이급 패턴 설계 예