Skip to content
Skip to breadcrumbs
Skip to header menu
Skip to action menu
Skip to quick search
Quick Search
Browse
Pages
Blog
Labels
Attachments
Mail
Advanced
What’s New
Space Directory
Feed Builder
Keyboard Shortcuts
Confluence Gadgets
Log In
Sign Up
Dashboard
Groovy
Copy Page
You are not logged in. Any changes you make will be marked as
anonymous
. You may want to
Log In
if you already have an account. You can also
Sign Up
for a new account.
This page is being edited by
.
Paragraph
Paragraph
Heading 1
Heading 2
Heading 3
Heading 4
Heading 5
Heading 6
Preformatted
Quote
Bold
Italic
Underline
More colours
Strikethrough
Subscript
Superscript
Monospace
Clear Formatting
Bullet list
Numbered list
Outdent
Indent
Align left
Align center
Align right
Link
Table
Insert
Insert Content
Image
Link
Attachment
Symbol
Emoticon
Wiki Markup
Horizontal rule
tinymce.confluence.insert_menu.macro_desc
Info
JIRA Issue
Status
Gallery
Tasklist
Table of Contents
Other Macros
Page Layout
No Layout
Two column (simple)
Two column (simple, left sidebar)
Two column (simple, right sidebar)
Three column (simple)
Two column
Two column (left sidebar)
Two column (right sidebar)
Three column
Three column (left and right sidebars)
Undo
Redo
Find/Replace
Keyboard Shortcuts Help
<p>Groovy는 매우 가볍게 설계되었으며 어떠한 자바 애플리케이션에도 쉽게 임베드될 수 있습니다.</p> <p><table class="wysiwyg-macro" data-macro-name="unmigrated-inline-wiki-markup" data-macro-parameters="atlassian-macro-output-type=BLOCK" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e3VubWlncmF0ZWQtaW5saW5lLXdpa2ktbWFya3VwOmF0bGFzc2lhbi1tYWNyby1vdXRwdXQtdHlwZT1CTE9DS30&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="PLAIN_TEXT"><tr><td class="wysiwyg-macro-body"><pre>{link:BSF|bsf.html}{link}</pre></td></tr></table> 를 이용하면 어떠한 스크립트 언어도 자바 코드에 임베드할 수 있습니다. 하지만 Groovy는 더 가볍도 긴밀한 연동을 위한 수단을 제공합니다. 주로 다음 세 가지 방법이 사용됩니다.</p> <h2>쉘을 이용하여 스크립트나 표현식을 평가하기</h2> <p><table class="wysiwyg-macro" data-macro-name="unmigrated-inline-wiki-markup" data-macro-parameters="atlassian-macro-output-type=BLOCK" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e3VubWlncmF0ZWQtaW5saW5lLXdpa2ktbWFya3VwOmF0bGFzc2lhbi1tYWNyby1vdXRwdXQtdHlwZT1CTE9DS30&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="PLAIN_TEXT"><tr><td class="wysiwyg-macro-body"><pre>{link:GroovyShell|apidocs/groovy/lang/GroovyShell.html}{link}</pre></td></tr></table> 을 이용하면 어떠한 표현식이나 스크립트도 평가할 수 있고 그 결과로 만들어진 변수들을 <table class="wysiwyg-macro" data-macro-name="unmigrated-inline-wiki-markup" data-macro-parameters="atlassian-macro-output-type=BLOCK" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e3VubWlncmF0ZWQtaW5saW5lLXdpa2ktbWFya3VwOmF0bGFzc2lhbi1tYWNyby1vdXRwdXQtdHlwZT1CTE9DS30&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="PLAIN_TEXT"><tr><td class="wysiwyg-macro-body"><pre>{link:Binding|apidocs/groovy/lang/Binding.html}{link}</pre></td></tr></table> 객체를 통해 내보낼 수 있습니다:</p> <table class="wysiwyg-macro" data-macro-name="code" data-macro-default-parameter="java" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2NvZGU6amF2YX0&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="PLAIN_TEXT"><tr><td class="wysiwyg-macro-body"><pre> // 자바 코드에서 Groovy 표현식 호출하기 Binding binding = new Binding(); binding.setVariable("foo", new Integer(2)); GroovyShell shell = new GroovyShell(binding); Object value = shell.evaluate("println 'Hello World!'; x = 123; return foo * 10"); assert value.equals(new Integer(20)); assert binding.getVariable("x").equals(new Integer(123)); </pre></td></tr></table> <h2>자바에서 동적으로 Groovy 코딩을 로딩하고 실행하기</h2> <p><table class="wysiwyg-macro" data-macro-name="unmigrated-inline-wiki-markup" data-macro-parameters="atlassian-macro-output-type=BLOCK" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e3VubWlncmF0ZWQtaW5saW5lLXdpa2ktbWFya3VwOmF0bGFzc2lhbi1tYWNyby1vdXRwdXQtdHlwZT1CTE9DS30&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="PLAIN_TEXT"><tr><td class="wysiwyg-macro-body"><pre>{link:GroovyClassLoader|apidocs/groovy/lang/GroovyClassLoader.html}{link}</pre></td></tr></table> 를 통해 동적으로 Groovy 클래스를 자바 프로그램으로 로드하고 직접 실행할 수 있습니다.</p> <p>다음 자바코드를 참고하세요:</p> <table class="wysiwyg-macro" data-macro-name="code" data-macro-default-parameter="java" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2NvZGU6amF2YX0&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="PLAIN_TEXT"><tr><td class="wysiwyg-macro-body"><pre> ClassLoader parent = getClass().getClassLoader(); GroovyClassLoader loader = new GroovyClassLoader(parent); Class groovyClass = loader.parseClass(new File("src/test/groovy/script/HelloWorld.groovy")); // 인스턴스의 메서드를 호출해봅시다 GroovyObject groovyObject = (GroovyObject) groovyClass.newInstance(); Object[] args = {}; groovyObject.invokeMethod("run", args); </pre></td></tr></table> <p>Groovy 스크립트가 구현하고 있는 특정 인터페이스를 사용하고자 하면 아래와 같이 할 수 있습니다:</p> <table class="wysiwyg-macro" data-macro-name="code" data-macro-default-parameter="java" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2NvZGU6amF2YX0&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="PLAIN_TEXT"><tr><td class="wysiwyg-macro-body"><pre> GroovyClassLoader gcl = new GroovyClassLoader(); Class clazz = gcl.parseClass(myStringwithGroovyClassSource, "SomeName.groovy"); Object aScript = clazz.newInstance(); MyInterface myObject = (MyInterface) aScript; myObject.interfaceMethod(); ... </pre></td></tr></table> <p>Groovy 클래스가 MyInterface라는 인터페이스를 구현하고 있다면 위 코드는 잘 돌아갈 것입니다. 이제 myObject는 MyInterface를 구현하고 있는 다른 자바 객체들과 동일하게 쓰일 수 있습니다.</p> <h2>Groovy 스크립트엔진(GroovyScriptEngine)</h2> <p>Groovy 스크립트를 서버에 임베드하고 스크립트 수정시 리로드하기를 원하는 사람들 위한 가장 완전한 해결책은 Groovy 스크립트엔진을 이용하는 것입니다. URL이나 디랙토리 이름으로 구성된 CLASSPATH 를 이용하여 Groovy 스크립트엔진을 초기화한 후에 해당 경로 상에 존재하는 어떠한 Groovy 스크립트도 사용할 수 있습니다. GSE는 또한 스크립트 사이의 의존 관계를 추적하고 있으므로 의존 관계에 있는 스크립트가 수정될 경우 전체 트리가 자동으로 재컴파일되고 리로드됩니다.</p> <p>추가로, 각 스크립트를 실행할 때 스크립트에서 접근할 수 있는 속성들을 담고 있는 Binding 객체를 넘겨줄 수 있고, 스크립트 실행 중에 변경된 Binding 객체의 모든 속성은 자바에서 접근할 수 있습니다. 아래 예제를 참고하세요:</p> <p>/my/groovy/script/path/hello.groovy:</p> <table class="wysiwyg-macro" data-macro-name="code" data-macro-default-parameter="java" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2NvZGU6amF2YX0&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="PLAIN_TEXT"><tr><td class="wysiwyg-macro-body"><pre> output = "Hello, ${input}!" </pre></td></tr></table> <table class="wysiwyg-macro" data-macro-name="code" data-macro-default-parameter="java" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2NvZGU6amF2YX0&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="PLAIN_TEXT"><tr><td class="wysiwyg-macro-body"><pre> import groovy.lang.Binding; import groovy.util.GroovyScriptEngine; String[] roots = new String[] { "/my/groovy/script/path" }; GroovyScriptEngine gse = new GroovyScriptEngine(roots); Binding binding = new Binding(); binding.setVariable("input", "world"); gse.run("test.groovy", binding); System.out.println(binding.getVariable("output")); </pre></td></tr></table> <p>위 코드는 "Hello, world!"를 출력할 것입니다.</p> <h2>런타임 의존성</h2> <p>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를 임베드할 수 있습니다.</p> <p>여러 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 <img class="emoticon emoticon-smile" data-emoticon-name="smile" border="0" src="/s/en_GB/3278/15/_/images/icons/emoticons/smile.png" alt="(smile)" title="(smile)" /></p> <h2><a class="confluence-link" href="/display/GROOVY/Korean+Running" data-linked-resource-id="54237" data-linked-resource-type="page" data-linked-resource-default-alias="Korean Running" data-base-url="http://docs.codehaus.org">다음</a></h2>
Please type the word appearing in the picture.
Attachments
Labels
Location
Watch this page
< Edit
Preview >
Loading…
Save
Cancel
Next hint
search
attachments
weblink
advanced