다음은 자바로 만든 Hello World 프로그램이다.
[code java]public class HelloWorld {
private String name;
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public String greet() {
return "Hello " + name;
}
public static void main(String[] args) {
HelloWorld helloWorld = new HelloWorld();
helloWorld.setName("Groovy");
System.out.println( helloWorld.greet() );
}
}[/code]
평범한 자바 소스다. 이 소스 파일을 그대로 그루비에서 groovyc 로 컴파일하거나, groovy 로 실행해보면, 한줄도 수정하지 않은 상태에서, 잘 실행해준다. 그루비 문법은 자바 문법을 대부분 수용한다.
이제 이 소스를 그루비답게 단계별로 고쳐보자...
우선 그루비에서는 세미콜론(;)과 public을 생략할 수 있다. 한줄에 명령문이 하나라면 세미콜론을 생략할 수 있고, public은 디폴트라서 생략할 수 있다. 또, 리턴(return)도 생략하자. 메서드의 마지막 문장이 return이면 생략할 수 있다.
class HelloWorld {
private String name
void setName(String name) {
this.name = name
}
String getName() { name }
String greet() { "Hello "+name }
static void main(String[] args) {
HelloWorld helloWorld = new HelloWorld()
helloWorld.setName("Groovy")
System.out.println( helloWorld.greet() )
}
}[/code]
이번에는 getName()에서 GString을 써보자.
[code groovy]
String greet() {
return "Hello ${name}"
}
[/code]
${name} 부분에서 GString의 문자열 치환기능을 사용했다. 파이썬이나 다른 언어에서 본 적이 있을 것이다. 저걸 사용하면 문자열 다루기가 훨씬 수월해진다.
프로퍼티 자동 생성 기능도 사용해보자.
그루비에서는 setName, getName 따위의 메서드를 따로 만들 필요가 없다. 변수를 public으로 정의하면 그루비가 자동으로 getXXX(), setXXX()를 만들어준다.
[code groovy]class HelloWorld {
String name
String greet() { "Hello ${name}" }
static void main(String[] args) {
HelloWorld helloWorld = new HelloWorld()
helloWorld.name = "Groovy"
System.out.println( helloWorld.greet() )
}
}
[/code]
이번에는 괄호도 생략하고, 동적 자료형도 써보자. 그루비도 오리형(duck type)을 지원한다.
[code groovy]
class HelloWorld {
def name
def greet() { "Hello ${name}" }
static main(args) {
def helloWorld = new HelloWorld()
helloWorld.name = "Groovy"
println helloWorld.greet()
}
}[/code]
String이 def로 바뀌었다. def로 정의한 변수는 오리형 변수가 된다.
마지막으로 그루비는 클래스파일을 생성할 수도 있지만, 동시에 스크립트로 호출할 수 도 있으니까. main 함수를 스크립트처럼 바꿔보자..
class HelloWorld {
def name
def greet() { "Hello ${name}" }
}
def helloWorld = new HelloWorld()
helloWorld.name = "Groovy"
println helloWorld.greet()
[/code]
마지막 예제만 보면 자바프로그램처럼 보이지 않겠지만, JVM 상에서 동작한다. 컴파일하면 class 파일도 만들어준다.
다시한번 ... 이 모든 것이 자바 가상 기계에서 돌아간다.
---
원문은 여기(http://groovy.dzone.com/news/java-groovy-few-easy-steps)에 있습니다.