데이터 지향 설계(Data Oriented Design: DOD)

[원본 링크]

DOD는 데이터의 효율적인 처리에 중점을 두는 설계 기법이다.
OOP와 조금은 대비되는 면이 있다.




OOP와 비교해서

OOP는 그저 유지보수와 확장, 교체 등에만 주안점을 두는 접근방식이기 때문에, OOP에서의 베스트 솔루션이 성능적으로도 베스트가 되지는 못한다.

특히, OOP에서는 다형성을 위해서 동적할당과 그 데이터의 접근을 매우 빈번하게 하는데, 이건 데이터 지역성이 좋지 않아서 캐시 미스가 상습적으로 일어난다.

그냥 웹서버 띄우는 정도로는 크리티컬한 성능문제로까지 커지지는 않지만, 최적화에 한계가 있는 것은 분명한 사실이다.
DOD 기법은 특히 데이터의 처리량이 많고 성능에 민감한 게임 프로그래밍에 매우 유효하다.




접근방식

만약 게임에서 특정 데이터의 그룹이나 상하관계를 구성한다고 하면 어떻게 할 것 같은가?
보통 Tree 구조 등을 활용할 일이 꽤 잦을 것이다.

하지만, 최선의 데이터 형태를 만들려면 저렇게 파편화되고 분산된 데이터는 최적화에 한계가 있다.
DOD 관점에서의 가장 좋은 데이터 배열법은 그냥, 벡터 등을 활용해서 단순하게 연속적으로 배치를 하는 것이다.

A 그룹에 속하는 컴포넌트를 쭉 늘어놓고, B 그룹에 속하는 컴포넌트들을 모아다가 쭉 늘어놓고...
이렇게 하면 메모리상에서부터 연속적으로 배치되기 때문에, 훨씬 빠르게 load하고 처리를 할 수 있다.

이러한 접근법은 particle-driven programming이라는 이름으로도 불린다.


읽을만한 참고자료
https://www.dataorienteddesign.com/dodbook/


참조
http://lab.gamecodi.com/board/zboard.php?id=GAMECODILAB_Lecture&page=1&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=hit&desc=desc&no=204
https://en.wikipedia.org/wiki/Data-oriented_design
https://www.dataorienteddesign.com/dodmain/
https://www.dataorienteddesign.com/dodbook/node3.html