Flyweight Pattern 이란? |
Flyweight : 플라이급 – 권투에서 체중이 가장 가벼운 체급
Flyweight 패턴은 Object(객체)를 ‘가볍게’ 하기 위한 것입니다.
무거운 Object : 많은 메모리를 사용하는 Object
가벼운 Object : 적은 메모리를 사용하는 Object
어떤 클래스의 인스턴스는 new Something()과 같이 만들수 있습니다.
이때 그 인스턴스를 저장하기 위해 메모리가 확보된되고, Something 클래스의 인스턴스가 많이 필요할 때, new를 많이하면 메모리의 사용량이 커진다는 것!!
이때 그 인스턴스를 저장하기 위해 메모리가 확보된되고, Something 클래스의 인스턴스가 많이 필요할 때, new를 많이하면 메모리의 사용량이 커진다는 것!!
한마디로 말하자면!!인스턴스를 가능한한 공유시켜서 쓸데없이 new 하지 않도록 합니다.
이미 만들어진 인스턴스를 이용할 수 있으면 그것을 공유해서 사용합니다.
클래스 다이어그램 |
클래스 설명
Flyweight(플라이급)
평소대로 취급하면 프로그램이 무거워지기 때문에,공유하는 것이 좋은것을 나타내는 역할
FlyweightFactory(플라이급의 공장)
Flyweight를 만들어 내는 공장의 역할
이 공장을 사용해 Flyweight 역할을 만들면 인스턴스가 공유
Client(의뢰자)
FlyweightFactory를 사용, Flyweight를 만들고 그것을 이용하는 역할
예제 |
아래와 같은 방식으로 숫자를 프린트 해주는 클래스들이 있다고 해봅시다.
0 ~ 9 까지 이런 클래스들이 존재하고,
1 2 1 2 1 2 3 을 아래와 같은 큰 결과로 출력하려고 할때, Flyweight 패턴을 이용할 수 있습니다.
출력할 결과는 아래와 같이 1 2 1 2 1 2 3 일것입니다.
이때, 각각 하나의 인스턴스를 공유해서 사용하는 것이 Flyweight 패턴입니다.
이미 만들어진 1이라는 인스턴스가 있다면, 그것을 사용하고, 없다면 새로 만들어 팩토리의 pool 에 저장해두고 씁니다.
Flyweight Pattern에 대해서 |
여러 장소에 영향을 미친다.
- 공유하고 있는 것을 변경하면 여러 장소에 영향을 미칩니다.
- 하나의 인스턴스를 변경하면 그 인스턴스를 사용하고 있는 여러 장소에 동시에 영향이 미칩니다.
리소스 절약
- Flyweight 패턴은 메모리의 사용량을 줄일 수 있습니다.
- 또한 new 해서 인스턴스를 생성하는 것은 너무너무너무나도 힘든 일인데,
new 하는 수를 줄임으로써 프로그램의 속도를 올릴 수 있습니다. (시간이라는 리소스를 절약)
new 하는 수를 줄임으로써 프로그램의 속도를 올릴 수 있습니다. (시간이라는 리소스를 절약)
관련있는 패턴 |
Singleton 패턴
- FlyweightFactory에서 인스턴스를 만들때 Singleton 패턴이 되는 경우가 있습니다.
Proxy 패턴
- Flyweight 패턴에서 인스턴스 생성에 시간이 걸리는 경우,
인스턴스의 공유에 따라 처리속도가 향상된다라고 하는군요.
인스턴스의 공유에 따라 처리속도가 향상된다라고 하는군요.
Composite 패턴
- Flyweight 패턴을 사용해서 Composite 패턴의 Leaf 역할을 공유시킬 수 있는 경우가 있습니다.
'General > Pattern' 카테고리의 다른 글
[구현패턴] 패턴과 프로그래밍 이론 (0) | 2012.01.21 |
---|---|
[구현패턴] 켄트벡의 구현패턴 (0) | 2012.01.21 |
[Design Pattern] Template Method Pattern (0) | 2011.04.01 |
[Design Pattern] Iterator Pattern / Iterator Design Pattern (0) | 2011.04.01 |
[Design pattern] Observer pattern (0) | 2011.02.11 |