시작하기

Hello, World

groovyConsole 창 위쪽에 다음 코드를 입력하세요:

println "Hello, World!"

그리고 <CTRL-R> 을 누르세요.
결과는 OS 콘솔창(groovyConsole 창 뒤에 있는 검은 창)에 출력됩니다. 그리고 groovyConsole 아래쪽에는 다음 코드가 출력됩니다.

groovy> println "Hello, World!"
null

"groovy>"로 시작하는 줄은 콘솔에 의해 처리된 텍스트 입니다. "null"은 처리 결과를 말합니다. 메시지를 출력하는 명령은 어떠한 "값"도 반환하지 않기 때문에 "null"이 찍힌 것입니다.

이번엔 뭔가 "값"을 갖는 명령을 입력해보지요. 콘솔에 다음 텍스트를 입력하세요:

123+45*67

<CTRL+R>을 누르면(앞으로는 <CTRL-R>을 누르라는 말을 생략하겠습니다), 이제 의미있는 "값"이 출력되는 것을 알 수 있습니다.

변수

값을 변수에 입력해놓고 나중에 써먹을 수 있습니다. 아래 코드를 실행해보세요:

x = 1
println x

x = new java.util.Date()
println x

x = -3.1499392
println x

x = false
println x

x = "Hi"
println x

Lists 와 Maps

Groovy는 두 가지 중요한 데이터 타입인 List와 Map에 대해서 언어 차원에서 지원하고 있습니다. List는 자바 언어에서 배열을 다루는 것 처럼 다룰 수 있습니다. List는 순서 있는 데이터 모음을 취급하기 위해 사용됩니다. 예를 들어 정수의 목록은 다음과 같이 표현됩니다:

myList = [1776, -1, 33, 99, 0, 928734928763]

List에 담긴 항목에 접근하려면 꺾인 괄호를 사용합니다. 인덱스는 0번부터 시작합니다:

println myList[0]

위 코드의 결과는 다음과 같습니다:

1776

List의 길이를 알고 싶으면 "size" 메서드를 호출하세요:

println myList.size()

결과는 다음과 같습니다:

6

하지만 보통은 길이를 알아낼 필요가 없습니다. 자바와는 달리 "each" 메서드를 사용하면 List의 모든 항목에 대해 루프를 돌수 있기 때문입니다. 자세한 설명은 아래 "데이터로써의 코드" 부분을 참고하세요.

또 다른 데이터 타입은 Map 입니다. Map은 "associative array" 혹은 "사전(dictionary)"을 표현하기 위해 사용됩니다. 즉 순서는 없고 이름이 붙어있는 데이터의 모음입니다. 예를 들어 이름과 IQ의 쌍을 저장하려고 하면 다음과 같이 씁니다:

scores = [ "Brett":100, "Pete":"Did not finish", "Andrew":86.87934 ]

Map에 저장되는 각 값들은 서로 타입이 달라도 됩니다. Brett은 Integer, Pete는 String, Andrew는 부동소수점(floating point) 입니다. Map의 값에 접근하려면 다음 두 가지 방법을 사용할 수 있습니다:

 
println scores["Pete"] 
println scores.Pete

결과는 다음과 같습니다:

Did not finish
Did not finish

Map에 자료를 추가할 때의 문법은 List에 값을 추가하는 문법과 비슷합니다: 예를 들어 Pete가 IQ 테스트를 다시 받아서 3점을 받았다면 다음과 같이 쓰면 됩니다:

scores["Pete"] = 3

이제 다음과 같이 다시 값을 출력해보면:

println scores["Pete"]

3이 출력됩니다.

빈 Map이나 빈 List를 만들려면 아래와 같이 하면 됩니다:

emptyMap = [:]
emptyList = []

조건적 실행

어떤 프로그래밍 언어에서라도 가장 중요한 기능 중 한가지는 조건에 따라 다른 명령을 실행하는 기능입니다. 가장 간단한 방법은 '''if''' 문을 쓰는 것입니다. 예를 들어:

amPM = Calendar.getInstance().get(Calendar.AM_PM)
if (amPM == Calendar.AM)
{
	println("Good morning")
} else {
	println("Good evening")
}

첫번째 줄은 단순히 지금이 오전인지 오후인지를 알아내는 코드이니 별 신경 쓰지 마세요. 코드의 나머지 부분은 다음과 같습니다. 우선 괄호 안의 수식을 평가하고 그 결과가 '''true'''인지 '''false'''인지에 따라 각각 첫번째 코드 블럭 혹은 두번째 코드 블럭을 실행합니다. Boolean 표현식에 대해서는 아래를 참고하세요.

아래와 같이 else 블록은 생략 가능합니다. 하지만 then 블록은 꼭 있어야 합니다:

amPM = Calendar.getInstance().get(Calendar.AM_PM)
if (amPM == Calendar.AM)
{
	println("Have another cup of coffee.")
}

Boolean 표현식

거의 모든 프로그래밍 언어에는 진리값 - '''true''', '''false''' - 을 표현하기 위한 특별한 자료형이 존재합니다. 가장 간단한 Boolean 표현식은 앞의 단어들(true 혹은 flase)을 바로 쓰는 것입니다. Boolean 값도 다른 값들처럼 변수에 저장될 수 있습니다:

myBooleanVariable = true

더 복잡한 Boolean 표현식은 다음 Boolean 연산자에 의해 표현됩니다:

* ==
* !=
* >
* >=
* <
* <=

위 대부분의 연산자는 제법 직관적입니다. 항등 연산자가 '''===''' 인 이유는 대입 연산자인 '''='''과 구분하기 위한 것입니다. 항등 연산자의 반대는 '''!=''' 연산자 입니다. 갖지 않음을 의미합니다.

다음은 예제입니다:

titanicBoxOffice = 1234600000
titanicDirector = "James Cameron"

trueLiesBoxOffice = 219000000
trueLiesDirector = "James Cameron"

returnOfTheKingBoxOffice = 752200000
returnOfTheKingDirector = "Peter Jackson"

theTwoTowersBoxOffice = 581200000
theTwoTowersDirector = "PeterJackson"

titanicBoxOffice > returnOfTheKingBoxOffice  // evaluates to true
titanicBoxOffice >= returnOfTheKingBoxOffice // evaluates to true
titanicBoxOffice >= titanicBoxOffice         // evaulates to true
titanicBoxOffice > titanicBoxOffice          // evaulates to false
titanicBoxOffice + trueLiesBoxOffice < returnOfTheKingBoxOffice + theTwoTowersBoxOffice  // evaluates to false

titanicDirector > returnOfTheKingDirector    // evaluates to false, because "J" is before "P"
titanicDirector < returnOfTheKingDirector    // evaluates to true
titanicDirector >= "James Cameron"           // evaluates to true

Boolean 표현식은 '''if'''와 함께 쓰일때 특히 유용합니다. 다음 예를 살펴보세요:

if (titanicBoxOffice + trueLiesBoxOffice > returnOfTheKingBoxOffice + theTwoTowersBoxOffice)
{
	println(titanicDirector + " is a better director than " + returnOfTheKingDirector)
}

특히 유용한 검사 중 하나는 변수 혹은 표현식이 null(아무 값도 없음을 의미합니다)인지 검사하는 것입니다. 다음 예제를 살펴보세요:

suvMap = ["Acura MDX":"\$36,700", "Ford Explorer":"\$26,845"]
if (suvMap["Hummer H3"] != null)
{
 	println("A Hummer H3 will set you back "+suvMap["Hummer H3"]);
}

null은 일반적으로 어떤 장소에 값이 없음을 나타내기 위해 사용됩니다.

디버깅과 문제해결 팁

만약 여러분이 자바 개발자라면: