원문 기사: http://www.ibm.com/developerworks/kr/library/os-eclipse-emf/
이클립스 서브프로젝트 중 가장 유용한 것을 꼽으라면 주저없이 EMF(Eclipse Modeling Framework)와 GEF(Graphical Editor Framework)를 꼽을 것이다. 그래피컬 편집기를 작성할 때 꼭 사용해야 하는 GEF는 요구사항에 해당하는 경우 필요성이 눈에 확 띄지만, 기반 모델 코드를 생성해주는 EMF는 상대적으로 접근하기 어렵거나 꼭 필요하지 않은 것으로 생각할 수 있다. 하지만 EMF는 이미 WTP 등 다른 주요 프로젝트의 기반 프레임워크 역할을 하고 있고 MDA(Model-Driven Architecture) 프로젝트의 핵심으로써 선택이 아닌 필수 프레임워크가 되어가고 있다. 필자 역시 EMF의 깊은 맛을 느끼기에는 아직 시간을 충분히 들이지 못했지만, 마침 dW 기사 중 EMF를 맛보기에 적합한 기사가 있어서 소개한다.
게다가 CNF(Common Navigator Framework)까지 함께 엮는 예제를 제공하고 있어서 상대적으로 짧은 예제임에도 불구하고 완성도 높은 결과물을 보여주고 있다. 즉 이클립스 플러그인 아키텍처의 매력과 섬세한 확장 능력을 제대로 보여주는 예제라고 할 수 있다. 이클립스 플랫폼을 기반으로 자신만의 개발환경을 만들다보면 기본 제공되는 Navigator 뷰를 확장하는 것보다 자신만의 뷰가 필요한 경우가 있다. (예: JDT의 Package Explorer) CNF는 네비게이터 스타일의 뷰를 작성할 때 공통적으로 사용하는 기본 기능을 제공하면서 유연하게 확장 가능한 뷰를 확장점으로 제공하는 멋진 프레임워크이다.

예제의 EMF와 CNF 연동 과정에서는 자바 코드보다 XML이나 EMF의 ecore 편집기만으로 거의 모든 작업이 완료된다. 물론 예제 이상의 커스터마이징에는 상당한 분량의 자바 코드가 필요하겠지만 EMF가 제공하는 모델 뿐만 아니라 EMF.Edit 등의 편집 컨트롤러 등의 도움으로 UI 코드의 커스터마이징을 최소화할 수 있다. EMF는 단순히 모델을 자동으로 생성하기 위한 것이 아니라 정의된 모델을 바탕으로 반복적으로 생성되는 UI 관련 코드 및 이벤트 전달 메커니즘, 기반 유틸리티 클래스들을 생성한다. 생성된 코드에서는 기본 View 예제 코드, Undo/Redo를 위한 Command 관리, GUI와 Model이 적절히 디커플링된 아키텍처를 제공하여 향후 유지보수에까지 도움을 준다는 점을 생각하면 EMF는 이클립스 플러그인 개발자의 필수 요소라 할 수 있을 것이다. 짧은 아티클에서 모든 것을 얻을 수는 없겠지만 일단 둘러보기에는 아주 좋은 예제일 것이다.
예제를 돌려보려면 EMF 사용법에 대한 기초지식이 필요하다. 다음 문서를 참고하라. Rational Rose가 없으면 Annotated Java를 사용하면 된다.
EMF 모델 생성하기
이 글은 스프링노트에서 작성되었습니다.