JET 튜토리얼

gyubong park·2021년 12월 22일
0

Java Emmitter Templates(이하 JET)을 이용하여 원하는 코드를 작성해보자
해당 포스팅을 통해 JET 템플릿을 생성하고 JET Nature와 JET builder가 어떻게 java 코드를 생성하는지 확인해본다

Eclipse Modeling Framowrk(이하 EMF) 프로젝트는 Java Emmitter Templates(이하 JET)과 JMerge(Java Merge) 포함하고 있다.
JET은 JSP와 비스한 문법을 사용하여 SQL, XML, Java 코드 등을 생성할 수 있다.
어떻게 JET을 사용하는지 알아보자

해당 포스팅은 JET 튜토리얼 part1을 따라서 실습해보면서 정리하였다.
아래의 순서대로 설명한다.

  • 프로젝트 생성
  • 프로젝트에 NET Nature 등록 (등록되면 프로젝트 root 하위에 templates 폴더 생성)
  • JET 속성에서 templates 폴더 내의 jet 파일을 자동으로 번역해주도록 설정
  • 예제 파일 생성해보기
    • helloworld

프로젝트 생성

EMF 프로젝트는 이클립스에서 시작한 프로젝트로 이클립스 IDE에 종속되어 있다. 다른 IDE에서는 JET을 사용하기 힘들다. 이클립스IDE에 새 프로젝트를 생성하자.

프로젝트에 NET Nature 등록

프로젝트 우클릭 --> New --> Others... --> Java Emitter Templates 선택

에서 자신이 생선한 프로젝트를 추가한다. 이렇게하면 자동적으로 JET Nature가 프로젝트에 추가된다.

JET 속성에서 templates 폴더 내의 jet 파일을 자동으로 번역해주도록 설정


위 그림과 같이 설정을 해주면 JET Builder는 templates에서 .~jet으로 끝나는 파일을 자동적으로 jet파일로 인식하여 스크립트를 번역해서 java 파일로 만들어 준다.

예제 파일 생성해보기 - helloworld

root-tmeplates에 file 추가를 통해 helloworld.txtjet 파일을 생성해보자

// helloworld.txtjet
<%@ jet package="hello" imports="java.util.*" class="HelloWorldTemplate" %>
Hello, <%=argument%>!

해당 스크립트를 작성하고 root-src-hello 폴더를 보면 자동으로 HelloWorldTemplate.java 파일이 생성되어 있을 것이다.
<%@ jet ~ %> 라는 스크립트가 있으면 jet 엔진이 자동적으로 이를 캐치하여 java 파일을 작성해낸다.
스크립트 안의 package는 생성될 패키지 위치를 나타내고 imports는 생성될 java 코드의 import를 정의한다. 그리고 class는 생성된 java 코드의 이름이다.
여기서 중요한 것은 이때 생성되는 java 코드는 우리가 원하는 결과물이 아니고 우리가 원하는 결과물을 만들어내기 위한 java 코드이다.
우리가 최종적으로 원하는 것은 "Hello, <%=argument%>!"와 같이 text를 생성해내는 것이다.(그래서 파일이름도 txtjet인 것!)

helloworld.txtjet 스크립트를 JET Builder가 생성한 HelloWorldTemplate.java는 아래와 같다.

package hello;

import java.util.*;

public class HelloWorldTemplate
{
  protected static String nl;
  public static synchronized HelloWorldTemplate create(String lineSeparator)
  {
    nl = lineSeparator;
    HelloWorldTemplate result = new HelloWorldTemplate();
    nl = null;
    return result;
  }

  public final String NL = nl == null ? (System.getProperties().getProperty("line.separator")) : nl;
  protected final String TEXT_1 = "Hello, ";
  protected final String TEXT_2 = "!";

  public String generate(Object argument)
  {
    final StringBuffer stringBuffer = new StringBuffer();
    stringBuffer.append(TEXT_1);
    stringBuffer.append(argument);
    stringBuffer.append(TEXT_2);
    return stringBuffer.toString();
  }
}

이렇게 생성된 코드에서 우리가 원하는 결과물을 얻기 위해서는 generate()를 멤버함수를 호출이 필요하다. 그래서 위 코드를 임포팅하는 테스트 코드를 만들어 HelloWorldTemplate 클래스 객체 생성 후 generate() 함수를 호출하면 우리가 원하는 최종 결과물을 얻을 수 있다.

package test;

import hello.HelloWorldTemplate;

public class Test01 {
	
	public static void main(String[] args) {
		HelloWorldTemplate helloworld = new HelloWorldTemplate();
		String result = helloworld.generate("gyubong");
		System.out.println(result);
	}
}

아래 블로그도 참고하면 jet에 대해 더 자세히 이해될 것이다.
https://www.nextree.co.kr/jetreul-iyonghan-soseukodeu-saengseong/

profile
초보 개발자

0개의 댓글