data-driven programming & data-driven design & data-oriented programming ???

Posted on Mar 12, 2025

비슷한 용어들. 내가 이해한 정리들은 1:

data-driven programming

데이터처리를 중심으로 하는 프로그래밍언어나 도구, 스타일.

예를 들어, awk, perl은 입력의 패턴에 따라 코드를 나누고 출력을 만들기 수월한 방식을 제공.

data-oriented design

현대 cpu의 아키텍처에 적절하도록, cpu cache, simd등을 잘 적용될 수 있도록 애플리케이션 데이터구조를 설계하는 방식.2

그리고 단순히 게임개발에서 ecs만이 아니라 lmax disruptor등도 포함될 것 같다.

data-oriented programming

그리고 또 갑자기 위 2개의 정의처럼 완전 갑자기, dop은 다음과 같은 원칙들을 이용한 애플리케이션 개발방식:

다음 책을 재밌게 읽음:

실은 이미 몇년전부터 clojure 커뮤니티, 코드에서는 일반화된 방식이었음.

분명히 유연하고 복잡도를 확 낮출 수 있는 방식이지만, 제약이 있음. (책에서는 제대로 언급하거나 다루지 않아서 아쉬웠음)

  1. 애플리케이션의 전체 데이터셋 크기가 메모리보다 크다면 적용이 어렵다.

    • ==> db을 쓰는 전통적인 방식의 애플리케이션을 기반으로 설명하지는 않음.
    • db 연결하는 챕터가 있지만, 실은 일부를 저장/로딩하는 내용일 뿐.
  2. multiple-dispatch을 제대로 지원하는 언어라면 더 적절함. (clojure)
  3. 당연히 실행시간 분기가 더 많아지므로, 성능이 정말 중요한 경우엔 손해.

그리고 이런 특징들 때문인지, clojure community은 다음과 같은 것들을 만들어 갔으리라:

  1. datomic

    • 링크의 예시에서 보듯이, clojure에서 in-memory자료에 접근하듯이 쿼리 및 데이터 표현.
  2. clojure.spec

    • 실행시간의 값의 내용에 따른 contracts, validations.

Footnotes


1

별도의 정리는 하지 않음.

2

이와 대조되는 방식으로는 전통적인 객체지향 등에서처럼 한 객체 인스턴스가 한 엔티티를 표현하고, 불연속적인 공간에 변수레퍼런스로서 참조/정리되어 있는 구조.