기획자나 아티스트가 프로그래머들의 도움이나 수정 없이 작업을 할 수 있는 시스템을 구축하는 것은

대규모 소프트웨어 구성시 필수불가결한 요소이다. 만약 중요한 데이터 값들이 코드에 박혀있고

그 값들을 하나라도 바꿔서 테스트 해보고 싶을 때마다 프로그래머가 새로 빌드를 해줘야 한다면

엄청나게 효율이 떨어질 수 밖에 없을테니까.


퍼포먼스가 허락하는 한 최대한 로직을 데이타로 빼내고, 데이타로 간단히 빼낼 수 없으면 스크립트라도

동원해서 빼내는 것을 최대한 추구하게 된다.

그러다보니까 생기게 되는 부작용이 생겨나기 시작한다.  바로 "코드가 데이타에 의존하게 되는 현상"이다.

의존성을 세울 때에는 변동성이 높은 쪽이 변동성이 낮은 쪽에 의존하게 만들어야 한다. 그렇지 않으면

변동성이 낮은, 안정적인 코드에 변동성이 전염되어버리고 만다.


일반성 있는 엔진이나 프레임워크을 지향하여 만들어놓은 코드들이 특정 파일 구조나, 특정 폴더 구조등

에 의존하게 되고, 그러한 '특정'한 부분의 부피가 점점 늘어나게 되면, 점점 시스템을 다루기 어려워진다.



물론 이 문제에 대한 해답은 데이터 드리븐하게 만든 부분을 다시 하드코딩하자는 것이 아니다.

대신, 변동성 높은 부분을 데이타로 빼면서도, 코드가 데이타에 덜 의존하게 만들 수 있도록, 코드상의

오브젝트가 직접 데이타의 특정 구조와 얽히게 하기보다는, object 와 translator 를 분리하여 data 의

변동성이 object 까지 미치지 않고 translator 부분에서 완충될 수 있게 하자는 것이 핵심이다.


Make the data push objects into existence, data->translator->objects, not viceversa, do not have objects query for data, pull information out of it! Creating an object(data) makes the two things hard to untangle, of course some data will be required to create an object, but that should be the data it needs, not a generic structure designed around your data-driving/management/asset loading/etc... system.

http://c0de517e.blogspot.com/2009/03/be-driven-by-data-but-dont-let-data.html

imcgames 의 김학규입니다