Entity Component System, 이하 ECS는 이름 그대로 Entity, Component, System으로 구성되고, 추가로 World라는 개념이 있다.
Component : 데이터를 저장하는 역할
Entity : 데이터 저장 X, unique한 index를 가진다.
System : 행동 (데이터를 변형시킨다)
World : Component와 System이 저장돼있음
World는 매 틱마다 System들을 실행한다. 각 System에 정의되어 있는 함수에서 Component를 수정하고, 그 Component 개체들을 가리키는 인덱스가 Entity이다.
하나의 Entity에는 여러 개의 Component가 들어갈 수 있고, Entity 간에는 부모 자식 관계를 맺을 수 있다.
위 예시에서는 Player라는 Entity가 있고, 그 Player는 현재 위치에 대한 정보와 속도, 그리고 크기에 대한 정보를 갖는다.
또 Weapon이라는 Entity는 무기의 종류와 데미지 정보를 갖으며, Player의 자식 엔티티이다.
추가로, Player Entity의 X축을 speed만큼 이동시키는 Move_x 라는 System이 있다고 하자.
Flecs는 System을 정의된대로 ecs.progress()를 호출할 때마다 실행한다. 따라서 위와 같이 정의돼있다면, Player의 Component중 Position의 x 값은 매 프레임마다 speed만큼 변동될 것이다.
ECS의 장점으로는 다음과 같다.
1. 데이터 지향을 사용하기 때문에 캐쉬 적중률이 높다.
2. 같은 이유로 멀티스레드 프로그래밍이 간단하다.
3. OOP보다 10배정도 빠르다.
단점으로는 비교적 복잡해 진입장벽이 높다.