디자인 패턴 - 경량 패턴(Flyweight pattern)
정의 : 공유를 통해 많은 수의 소립 객체들을 효과적으로 지원한다.
많은 인스턴스가 공유하는 정보는 하나의 클래스로 만들고, 인스턴스별로 달라야 하는 상태값만 저장하는 클래스를 만들어서 공유 정보 클래스를 참조한다.
하나의 공유 정보 클래스와 무수한 인스턴스를 생성하면 중복된 정보를 메모리에 올릴 필요가 없어진다.
예를 들어 풀을 그리는데 풀의 텍스쳐와 메시를 공유 정보에 두고, 높이와 넓이처럼 인스턴사마다 다른 상태값만 따로 저장하고 공유 정보는 참조로 구성한다.
Direct3D, OpenGL 모두 이런 인스턴스 렌더링(Instance rendering)으로 지원한다.
모든 객체의 데이터 값이 같아서 공유할 수 있는 데이터인 '고유 상태(Intrinsic state)'와 인스턴스 별로 값이 다른 '외부 상태(extrinsic state)'
또한 예시로서 지형 타일을 예로 들 수 있는데, 지형 속성은 고유 상태로 두고 하나의 인스턴스를 참조하고, 타일의 위치는 외부 상태로 만들어서 배열을 형성할 수도 있다.
이렇게 하면 지형 타일을 만드는 World는 지형의 세부 정보와 커플링되지 않으며, 타일 속성은 지형 타일 객체에서 참조하는 고유 상태를 통해 알아낼 수 있다.
열거형을 통해 스위치문을 만들 것이라면 경량 패턴을 고려해볼 수 있다.
{
Terrain* tiles
}
{
}
}
}
그냥 i,j라는 좌표의 타일이 어떤 terrain이라는 것만 표시한다. 실제로 저 정보를 중복해서 담는 타일들을 생성하지는 않는다.
댓글
댓글 쓰기