이것이 의미하는 것은 레고에서 블록을 조합하여 하나의 시나리오를 갖는 큰 블록을 만들 수 있으며 큰 블록을 조합하여 하나의 완결된 스토리를 갖는 완성품을 쉽게 만들 수 있다는 것이다.
이를 위해 생각해야 할 것은 모듈의 "독립성"이다.
그러나 아이러니 하게도 독립적 모듈을 쉽게 조립/조합하기 위해선 하나의 공통된 자료구조가 정의되어 있어야 하고 이것에 의존해야 한다.
마치 레고의 모양은 형형색색 다르지만 접합하는 부분은 쉽게 끼우고 뺄 수 있도록 모든 블록이 통일된 것을 생각해 보면 쉽게 이해할 수 있다.
이러한 이해를 바탕으로 실제 모듈 통합을 염두에 둔 모듈 설계를 해 보면 하나의 궁극적 딜레마에 빠지게 된다. 그것은 바로 모듈 독립성의 범위와 모듈 인터페이스 및 Helper를 위한 공통 자료구조를 어디까지 정의할 것인가에 대한 것이다.
지난 오랜 시간의 경험을 통해 이 딜레마에서 가장 우선적으로 고려해야 할 것은 기능의 확장성과 유연성에 있음을 깨닫게 되었다. 이는 비단 본인의 경험뿐만 아니라 뭇 선현들에 의해서도 입증이 된 것인데, VXFramework에서는 이를 위해 모든 모듈의 interface를 완벽히 동일하게 정의하고 interface를 위한 자료구조를 타협할 수 있는 수준에서 추상화하는 방법을 선택하였다.
물론 "타협할 수 있는 수준"은 어디까지나 이를 설계하는 사람의 역량과 경험에 의해 결정되겠지만 지금 생각해 보면 Object과 Script화된 Parameter의 사용은 최상의 선택인 것 같다. 물론 이것이 추상화된 것만큼 모듈을 사용하는 component의 작업이 괴로워질 수 있으나 이 역시 합리적인 수준에서 마무리된 것으로 보인다.
VXFramework은 이 합리적인 수준을 위해
- 모듈의 common interface로 모듈에 들어오는 추상화된 인자를 구체화하여 확인하는 interface
- 최초/최후 모듈이 실행될 때 호출되는 interface
- 임의로 모듈과 통신할 수 있는 interface
- 모듈의 core 실행을 위한 interface
다음은 VXFramework에서 정의한 Module's Common Interface 이다.
이렇게 추상화된 interface를 효과적으로 사용하기 위해선 플랫폼에 가까운 상위 interface에서 직관적이고 구체적으로 정의된 인자를 이에 맞게 변환하여 주는 똑똑한 Wrapper / Arbiter가 정의되야 한다.
여기선 '똑똑한' 정의를 다음으로 미루며 위와 같은 Module's Common Interface가 VXframework에서 정의되어 있다는 것까지 정리하도록 한다.