Flyweight 패턴

뾰족머리삼돌이·2024년 9월 27일
0

디자인패턴

목록 보기
12/21

객체의 필드들은 사실 내부의 불변 데이터외부의 가변 데이터로 구분된다.
객체 생성시점 이전에 이미 정해진 데이터와 객체 생성 시에 주어지는 데이터로 나뉘지는 것이다.

만약, 클래스의 객체를 다수 생성한다면 메모리사용량이 빠르게 치솟을 것이다.
프로그램 내의 메모리 사용량을 조절하기 위해서는 내부의 불변 데이터를 따로 관리하는 것이 필요하며, 이를 Flyweight 객체라고 부른다.

즉, 기존 클래스에서 내부의 불변 데이터를 별도의 객체로 관리함으로써 중복되는 객체생성에서의 메모리 낭비를 줄이는 것이다.

Refactoring Guru의 이미지를 참고하여 살펴봤을 때,
만약 21KB에 해당하는 불변 데이터를 가변 데이터와 함께 생성시킨다면 21GB가 넘는 메모리가 소요되는 꼴이다.

그렇다면 불변 데이터를 어떻게 관리해야할까?

플라이웨이트 패턴을 적용하면 불변 데이터와 가변 데이터를 각자의 클래스로 관리된다.
가변데이터는 프로그램 흐름에 따라 지속적으로 생성되므로, 객체가 생성될 때 불변 데이터 객체 필드를 소유하도록 컴포지션 구조로 구성하면 된다.

이 과정에서 불변 데이터 객체를 관리하는 별도의 Factory 클래스를 구성해두는 것이 위 이미지의 구조다.
즉, 가변 데이터 객체의 생성에서 Factory 클래스에게 원하는 조건을 전달하면 불변 데이터 객체를 지급받는 형식이다.

0개의 댓글

관련 채용 정보