본문 바로가기

Design Patterns/영문 위키(Wikipedia)

Flyweight pattern (플라이웨이트 패턴)

먼저 이 글은 영문 위키의 글을 번역한 글임을 알려드립니다.

영어 실력이 부족한 관계로 오역이 있을 수도 있습니다.

원문 주소 : http://en.wikipedia.org/wiki/Flyweight_pattern



구조적 패턴 - 플라이웨이트 패턴



컴퓨터 프로그래밍에서 플라이웨이트는 소프트웨어 디자인 패턴 중 하나이다. 플라이웨이트는 가능한 많은 데이터는 다른 유사한 객체들과 공유함으로써 메모리 사용을 최소화하는 객체이다. ; 이는 어떤 단순 반복되는 표현(representation)이 받아들일 수 없을 정도의 메모리를 사용할 때 객체를 수없이 많이 사용하는 방법이다. 종종 객체 상태의 일부분은 공유될 수 있고, 이를 외부 자료구조(data structures)에 두고, 사용될 때에 플라이웨이트 객체에 전달하는 방법이 일반적이다.




플라이웨이트 패턴의 고전적인 사용예는 워드 프로세서(word processor)에서 문자들의 그래픽적 표현에 대한 자료구조이다. 한 문서, 폰트의 외곽선을 포함하는 글자모양(glyph) 객체(그냥 글자의 모양을 표현하는 외곽선이라 생각하면 쉬울 듯 합니다. ), 폰트 매트릭스, 그리고 다른 포맷 데이터 각각에 각 문자들을 가지고 있는 것이 바람직할지도 모르지만, 이렇게 하면 한 문자당 수백 또는 수천 바이트가 필요할지도 모른다. 대신에, 모든 문자들이 그 문서 안의 같은 문자 객체에 의해 공유되는 플라이웨이트 글자모양 객체에 대한 레퍼런스(reference)가 될 수 있다.; 오직 각 문자의 위치정보만이 내부적으로 저장될 필요가 있을 것이다.


다른 문맥에서 동일한 자료 구조를 공유하는 아이디어는 hash consing이라 불린다.

역사 History

Designe Patterns: Elements of Reusable Object-Oriented Software 책에 따르면, 플라이웨이트 패턴은 1990년에 Paul Calder와 Mark Linton이 WYSIWYG 문서 편집기의 글자모양 정보를 효율적으로 다루기 위해 처음 도입되고 널리 연구되어졌다. 비록 비슷한 기술이 다른 시스템에서 이미 사용되고 있었지만 말이다.(1988년에 Weinand 등의 한 애플리케이션 프레임웍에서..)

자바 예 Example in Java