728x90

경량 패턴은 재사용 가능한 객체 인스턴스를 공유시켜 메모리 사용량을 최소화하는 구조 패턴이다.

캐시 개념을 코드로 패턴화 한것으로 보면됨.

자주 변하는 속성(extrinsit)과 변하지 않는 속성(intrinsit)을 분리하고 변하지 않는 속성을 캐시하여 재사용해 메모리 사용을 줄이는 방식.

동일하거나 유사한 객체들 사이에 가능한 많은 데이터를 서로 공유하여 사용하도록 하여 최적화를 노리는 경량 패턴.

 

Flyweight 패턴 구조

 

Flyweight: 경량 객체를 묶는 인터페이스

ConcreteFlyeweight: 공유 가능하여 재사용되는 객체(intrinsic state)

UnsahredConcreteFlyweight: 공유 불가능한 객체(extrinsic state)

 

FlyweightFactory: 경량 객체를 만드는 공장 역할과 캐시 역할을 겸비하는 Flyweight 객체 관리 클래스

GetFlyweight() 메서드는 팩토리 메서드 역할을 한다고 보면 된다.

만일 객체가 메모리에 존재하면 그대로 가져와 반환되고, 없다면 새로 생성해 반환한다.

 

Client: 클라이언트는 FlyweightFactory를 통해 Flyweight 타입의 객체를 얻어 사용한다. 

 

intrinsic과 extrinsic 상태

 

intrinsic - '고유한, 본질적인'  이라는 의미. 본질적인 상태란 인스턴스가 어떠한 상황에서도 변하지 않는 정보.

 

intrinsic 객체 - 장소나 상황에 의존하지 않기 때문에 값이 고정되어 공유할 수 있는 객체

 

extrinsic - '외적인, 비본질적인' 이라는 의미.  인스턴스를 두는 장소나 상화에 따라서 변화하는 정보를 말한다. 

 

extrinsic 객체 - 장소나 상황에 의존하기 때문에 매번 값이 바뀌어 공유할 수 없는 객체

 

 

사용 시기

어플리케이션에 의해 생성되는 객체의 수가 많아 저장 비용이 높아질때

생성된 객체가 오래도록 메모리에 상주하며 사용되는 횟수가 많을때

공통적인 인스턴스를 많이 생성하는 로직이 포함된 경우

임베디드와 같이 메모리를 최소한으로 사용해야하는 경우에 활용

 

 

장점

 

애플리케이션에서 사용하는 메모리를 줄일 수 있다.

프로그램 속도 개선

new 인스트스화를 하면 데이터가 생성되고 메모리에 적재되는 미량의 시간이 걸리게된다.

객체를 공유하면 인스

 

단점

코드 복잡도 증가

 

 

728x90

+ Recent posts