본문 바로가기
Design Pattern/구조 패턴(Structural patterns)

Flyweight Pattern, 플라이웨이트 패턴

by codeyaki 2024. 2. 14.
반응형

플라이웨이트란?

메모리 사용량을 줄이기 위해서 사용된다. 수많은 객체를 생성할 때 객체들의 공통된 부분을 공유하여 메모리의 사용량을 줄일 수 있다. 

 

예를 들어 배틀그라운X에서 나무, 총알, 파편등 많은 입자들을 각각 별도의 객체로 구현했다면 메모리가 매우 많이 필요하게 되어 사양이 매우 좋은 사람 빼고는 게임을 원활하게 진행하기 어려웠을 것이다.

이러한 부분을 플라이웨이트 패턴을 통해서 최대한 메모리를 적게 사용하도록 만들어서 슈퍼컴퓨터가 아닌 일반 사용자도 게임을 즐길 수 있게 된다.

 

왜 사용해야 하는가?

  • 메모리 사용량을 줄일 수 있기 때문이다.
  • 객체 생성 비용이 높은 경우 이를 줄여주어 성능 향상에 도움이 된다.

어떤 경우에 사용해야 하는가?

  • 많은 수의 유사한 객체를 생성해야 하는 경우
  • 메모리 사용량이 높아 성능에 문제가 생긴 경우
  • 객체 간에 중복된 상태들을 추출하여 공유할 수 있는 경우
싱글턴 vs 플라이웨이트
싱글턴은 객체가 한 개만 존재한다. 반면에 플라이웨이트는 고유한 상태를 가진 여러 객체가 존재할 수 있다.
싱글턴 객체는 변할 수 있다. 반면에 플라이웨이트 객체들은 변할 수 없다.

 

구현 방법(자바)

플라이웨이트는 적당한 예시를 생각해 내기 어려워서 기존에 있는 예시를 참고하면 좋을 것 같아서 가져왔다.

 

2D로 나무를 렌더링 하는 예시인데 패턴을 사용하지 않으면 36MB가 필요한 반면에 플라이웨이트를 적용하면 7MB만 필요하다는 것을 알 수 있게 해 준다.

 

https://refactoring.guru/ko/design-patterns/flyweight/java/example

 

자바로 작성된 플라이웨이트 / 디자인 패턴들

/ 디자인 패턴들 / 플라이웨이트 / 자바 자바로 작성된 플라이웨이트 플라이웨이트는 구조 패턴이며 프로그램들이 객체들의 메모리 소비를 낮게 유지하여 방대한 양의 객체들을 지원할 수 있도

refactoring.guru

 

 

 

반응형