2009년 12월 4일 금요일

Flyweight Pattern

Flyweight Pattern

Flyweight : 플라이급, 권투에서 가장 체중이 가벼운 체급

Flyweight Pattern는 오브젝트(객체)를 가볍게 하기 위한 것이 목적입니다.
여기서 가볍게라는 의미를 말하자면,
많은 메모리를 사용하는 오브젝트를 무겁다라고 표현하고, 적은 메모리를 사용하는 오브젝트를 가볍다라고 표현 합니다.
new Something()
라는 식으로 Something 클래스의 인스턴스를 만들수 있습니다. 이때, 그 인스턴스를 저장하기 위해서 메모리가 확보됩니다. Something 클래스의 인스턴스가 많이 필요할 때에, new를 많이 하면 메모리의 사용량이 커지게 됩니다.
이번 패턴에서 사용하는 기법을 한마디로 말하자면,
 '인스턴스를 가능한 대로 공유시켜서 쓸데없이 new하지 않도록 한다.'
라는 것입니다.
인스턴스가 필요할 때 항상 new 하는것이 아니라 이미 만들어져 있는 인스턴스를 이용할 수 있으면 그것을 공유해서 사용합니다 이것이 Flyweight Pattern의 핵심입니다.

 

예제 프로그램

아래의 첨부파일을 보시면 debug 폴더에 big0~big9까지 텍스트파일로 들어있습니다. 이번 예제는
파일(big0~9)로 부터 큰문자의 텍스트를 읽어들여 메모리에 저장하고 print 하는 것입니다.
이때에 큰 문자는 메모리를 소비하기 대문에 인스턴스를 공유하는 방법을 쓴 것입니다.
만약 인스턴스가 이미 만들어져 있는 경우에는 그것을 이용하고 새로운 인스턴스를 만들지 않습니다.

 

Flyweight Pattern의 등장인물

Flyweight의 역할
: 평소대로 취급하면 프로그램이 무거워지기 때문에 공유하는 것이 좋은 것을 나타내는 역할
  예제프로그램에서 BigChar 클래스

FlyweightFactory의 역할
: FlyweightFactory 역할을 만드는 공장의 역할.
  이공장을 사용해서 Flyweight 역할을 만들면 인스턴스가 공유
  예제프로그램에서 BigCharFactory

Client의 역할
: FlyweightFactory 역할을 사용해서 Flyweight 역할을 만들고 그것을 이용하는 역할
  예제프로그램에서 BigString 클래스
 


 

출처 : Java 언어로 배우는 디자인 패턴 입문



 

댓글 없음:

댓글 쓰기