Fundamental Notes/Design Patterns

플라이웨이트(Flyweight) 패턴

콩콩댕 2014. 11. 21. 20:23
반응형

Head First Design Patterns :

어떤 클래스의 인스턴스 한 개만 가지고 여러 개의 "가상 인스턴스"를 제공하고 싶을 때 사용.


시나리오 >>

조경 설계 애플리케이션에서 나무를 객체 형태로 추가해야 한다. 애플리케이션 내에서 나무들의 역할은 별로 중요하지 않다. 그냥 x, y 좌표를 가지고 있고, 나무의 수령에 따라서 적당한 크기로 화면에 표현되기만 하면 된다. 문제는 어떤 사용자가 나무를 꽤 많이 집어넣으려고 한다는 것이다.


클라이언트의 딜레마 >>

드디어 제법 큰 고객을 잡았습니다. 몇 달 동안 공을 들인 끝에 잡은 고객인데,  1000 카피를 구입할 예정이고, 우리가 만든 소프트웨어를 써서 대규모 주택단지의 조경을 설계하려고 합니다. 그런데 그 소프트웨어를 1주일 동안 테스트해 본 결과 나무드을 많이 만들면 애플리케이션이 눈에 띄게 느려진다는 것을 발견했다고 합니다.


왜 플라이웨이트 패턴을 쓸까? >>

Tree 객체를 수 천 개 만드는 대신 시스템을 조금 고쳐서 Tree의 인스턴스는 하나만 만들고 모든 나무들의 상태를 클라이언트 객체에서 관리하도록 하고자 할 때.


플라이웨이트 패턴의 장점 >>

실행시에 객체의 인스턴스의 갯수를 줄여서 메모리를 절약할 수 있다.

여러 "가상" 객체의 상태를 한 곳에 집중시켜놓을 수 있다.


플라이웨이트 패턴의 사용법 및 단점 >>

어떤 클래스의 인스턴스가 아주 많이 필요하지만 모두 똑같은 방식으로 제어할 수 있는 경우에 유용.

특정 인스턴스만 다른 인스턴스와 다른 식으로 행동하는것이 불가능한 단점이 있음.



Wiki : 

플라이웨이트 패턴(Flyweight pattern)는 동일하거나 유사한 객체들 사이에 가능한 많은 데이터를 서로 공유하여 사용하도록 하여 메모리 사용량을 최소화하는 소프트웨어 디자인 패턴이다. 종종 오브젝트의 일부 상태 정보는 공유될 수 있는데, 플라이웨이트 패턴에서는 이와 같은 상태 정보를 외부 자료 구조에 저장하여 플라이웨이트 오브젝트가 잠깐 동안 사용할 수 있도록 전달한다.


http://ko.wikipedia.org/wiki/%ED%94%8C%EB%9D%BC%EC%9D%B4%EC%9B%A8%EC%9D%B4%ED%8A%B8_%ED%8C%A8%ED%84%B4

'Fundamental Notes > Design Patterns' 카테고리의 다른 글

퍼사드(Facade) 패턴  (0) 2014.11.21