블로그 이미지
앨리삵

앨리삵입니다.

Rss feed Tistory
Coding Note 2013.03.05 23:47

[Design pattern] Flyweight

Flyweight pattern : 리소스등을 관리하다보면 중복되어 생성되는 리소스가 생기기 마련이다. 이러한 구조에서 체중을 줄여 Flyweight급으로 만들어주는 패턴이 Flyweight pattern이다.


흔히 Flyweight pattern을 설명할때 '공유의 관점'을 언급한다. 공유의 관점에는 논리적인 관점에서의 공유와 구현의 관점에서 공유가 있는데, Flyweight로 만들기 위해 구현의 관점에서 퍼포먼스를 위한 공유를 생각한다. 이를 통해 컴퓨터의 리소스를 보다 효율적으로 사용하도록 구조화 하여 프로그램을 날래게 만들어준다.


풀(Pool)은 컴퓨터의 리소스를 효율적으로 사용할 수 있는 좋은 방법이다. 반복되어 사용되는 객체를 미리 만들어 풀에 담아둔 후 필요한곳에 사용하고, 필요에 따라서 다 쓴 객체는 다시 풀에 반환하게 할 수 있다.


그래픽컬한 리소스의 경우 동일한 리소스를 반복적으로 사용할때가 많은 만큼, 필요한 리소스를 미리 만들어두고 요청하는 리소스의 레퍼런스를 반환해 주는 방법으로 효율성을 높일 수 있다.



관리 클래스는(여기서는 ImagePool) Singleton이나 Factory 패턴을 적용하여 구현할 수 있다. 클라이언트는 이를 통해 공유되고있는 리소스에 접근하지만, 내부적으로 공유가 되고있는지는 알지못한다.


..Flyweight pattern은 구현 방식에 제한을 두는것 같지는 않다. 단지 중복되는 리소스를 줄이고 기존 리소스와 동일하게 처리될 수 있게 구현되었다면  충분하다라는 느낌이다.


한줄요약 : 디자인패턴이라고 퍼포먼스가 뒷전인것은 아니다. 객체지향적인 관점에서 퍼포먼스를 다뤄주는 패턴이다.

저작자 표시 비영리 변경 금지
신고

'Coding Note' 카테고리의 다른 글

[Design pattern] Interpreter  (0) 2013.03.18
[Design pattern] Proxy  (1) 2013.03.07
[Design pattern] Flyweight  (3) 2013.03.05
[Design pattern] Facade  (0) 2013.03.04
[Design pattern] Decorator  (0) 2013.03.03
[Design pattern] Composite  (0) 2013.03.03
  • anonymous 2014.01.15 23:14 신고 ADDR 수정/삭제 답글

    좋은 정리 감사합니다~!

  • 아수라발발타 2017.04.07 19:03 신고 ADDR 수정/삭제 답글

    적당한 패턴 자료가 없어서 학습에 힘들어하고 있었는데 너무 이해하기 쉽고 좋은 예제로 설명해 주셨네요.. 정말 너무너무 감사합니다~

TOTAL 279,218 TODAY 184

티스토리 툴바