ECS 라는게 난 그렇게 거창한게 아니라고 생각하는 사람이라서 그럴 수도 있음.

결국 캐시 공간지역성을 극도로 사용하기 위한 자료구조라고 난 생각함.

그리고 자료구조다 보니 ECS의 환경이 아니라도 사용할 수 있는 당연한 개념이라 생각함.

예로들어, ECS 하면 많이 언급되는 자료구조 중 하나가 SparseSet 이잖아.
근데 SparseSet 을 보면 그냥 Dictionary 임.
Key를 주면 Value를 뱉는 자료구조.


대신 Dictionary는 메모리가 여러 곳에 파편화되기 때문에 성능 이슈가 있을 수 있는데

SparseSet은 이 성능 이슈를 없애기 위한 컨셉을 추가한 Dictionary 이지.

컨셉은 간단함.

2개의 배열 Sparse, Dense 를 사용하는데, 
Sparse 에는 실제 데이터가 어디에 있는지가 담겨져 있고,
Dense 에는 실제 데이터가 담겨져 있음.


Key가 들어오면 해당 Key를 인덱스로 Sparse 배열에 접근하고, 그 배열의 값이 실제 데이터의 Dense Index 를 얻을 수 있음
그리고 그 Dense Index로 Dense 배열에 접근해서 실제 데이터를 가져올 수 있지.
Key가 추가 될 때 Dense 배열에 연속적으로 저장되고, 삭제될 때도 삭제되는 원소와 맨 뒤의 원소를 서로 Swap 하는 방식으로 하기 때문에

Dictionary와 마찬가지로 조회 삭제 추가가 O(1) 복잡도로 처리 된다는거고, 

가장 중요한건 실제 데이터(Dense)가 배열이다 보니깐 이터레이션 돌리면 캐쉬 히트율이 붐 하는거지.
거기다가 루프 의존성이 없다 ? 바로 Job 때려버리면 한번 더 가속.

그냥 이새끼는 자료구조임.
성능이 중요하면 언제든지 써야 함.

다들 맛점하고