Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 2 Current »

Groovy는 매우 가볍게 설계되었으며 어떠한 자바 애플리케이션에도 쉽게 임베드될 수 있습니다.

Error formatting macro: link: java.lang.IllegalArgumentException: Link needs a name and a URL as arguments.
를 이용하면 어떠한 스크립트 언어도 자바 코드에 임베드할 수 있습니다. 하지만 Groovy는 더 가볍도 긴밀한 연동을 위한 수단을 제공합니다. 주로 다음 세 가지 방법이 사용됩니다.

쉘을 이용하여 스크립트나 표현식을 평가하기

Error formatting macro: link: java.lang.IllegalArgumentException: Link needs a name and a URL as arguments.
을 이용하면 어떠한 표현식이나 스크립트도 평가할 수 있고 그 결과로 만들어진 변수들을
Error formatting macro: link: java.lang.IllegalArgumentException: Link needs a name and a URL as arguments.
객체를 통해 내보낼 수 있습니다:

자바에서 동적으로 Groovy 코딩을 로딩하고 실행하기

Error formatting macro: link: java.lang.IllegalArgumentException: Link needs a name and a URL as arguments.
를 통해 동적으로 Groovy 클래스를 자바 프로그램으로 로드하고 직접 실행할 수 있습니다.

다음 자바코드를 참고하세요:

Groovy 스크립트가 구현하고 있는 특정 인터페이스를 사용하고자 하면 아래와 같이 할 수 있습니다:

Groovy 클래스가 MyInterface라는 인터페이스를 구현하고 있다면 위 코드는 잘 돌아갈 것입니다. 이제 myObject는 MyInterface를 구현하고 있는 다른 자바 객체들과 동일하게 쓰일 수 있습니다.

Groovy 스크립트엔진(GroovyScriptEngine)

Groovy 스크립트를 서버에 임베드하고 스크립트 수정시 리로드하기를 원하는 사람들 위한 가장 완전한 해결책은 Groovy 스크립트엔진을 이용하는 것입니다. URL이나 디랙토리 이름으로 구성된 CLASSPATH 를 이용하여 Groovy 스크립트엔진을 초기화한 후에 해당 경로 상에 존재하는 어떠한 Groovy 스크립트도 사용할 수 있습니다. GSE는 또한 스크립트 사이의 의존 관계를 추적하고 있으므로 의존 관계에 있는 스크립트가 수정될 경우 전체 트리가 자동으로 재컴파일되고 리로드됩니다.

추가로, 각 스크립트를 실행할 때 스크립트에서 접근할 수 있는 속성들을 담고 있는 Binding 객체를 넘겨줄 수 있고, 스크립트 실행 중에 변경된 Binding 객체의 모든 속성은 자바에서 접근할 수 있습니다. 아래 예제를 참고하세요:

/my/groovy/script/path/hello.groovy:

위 코드는 "Hello, world!"를 출력할 것입니다.

런타임 의존성

Groovy는 Java 1.4 런타임과 Groovy jar 이외에도 네 개의 jar로 구성된 ASM 라이브러리(asm-2.1.jar, asm-util-2.1.jar, asm-attrs-2.1.jar, asm-analysis-2.1.jar)에 의존하고 있습니다. 이게 전부입니다. 즉, 이 다섯개의 jar 파일을 CLASSPATH에 등록하면 애플리케이션에서 아무 문제 없이 Groovy를 임베드할 수 있습니다.

여러 jar를 등록하는 대신, GROOVY_HOME/embeddable 디랙토리에 있는 groovy-all-1.0-beta-x.jar 파일을 이용할 수도 있습니다. This jar contains both Groovy and ASM combined in a single and convenient archive, with the ASM classes in a different namespace, so conflits with other libraries also using ASM will be avoided (smile)

다음

  • No labels