
2008.3.23 translation & editing by gilbird
원문: http://groovy.codehaus.org/Tutorial+1+-+Getting+started
시작하기
자바 환경 설정
그루비는 자바를 사용한다. 따라서 최신버전의 자바를 미리 설치하기 바란다.
자바를 아직 설치 하지 않았다면 다음 단계대로 하면 된다.
- http://java.sun.com에서 최신 자바 설치 프로그램을 구한다.
- 설치를 수행한다.
- JAVA_HOME 환경 변수를 설정한다. 윈도우즈에서는 다음과 같이 한다.
- 내 컴퓨터의 속성을 클릭한다.
- 고급 탭의 환경 변수 버튼을 클릭한다.
- 시스템 변수의 새로 만들기 버튼을 클릭하여 변수 이름은 JAVA_HOME,
변수 값은 자바를 설치한 디렉토리명을 입력한다. (예: C:\jdk1.6.0_05)
그루비 환경 설정
그루비 인스톨러를 다운로드 페이지에서 다운받고 안내에 따라서 설치한다.
추가적인 jar 파일 설정
추가적으로 그루비 모듈, 클래스 파일 등으로 구성된 jar 파일을 받고자 한다면, 다음 링크를 참고하기 바란다.
| Name |
From |
Description |
| jtds-version.jar |
http://jtds.sourceforge.net |
Database driver for SQL Server and/or Sybase |
| hsqldb-version.jar |
http://www.hsqldb.org/ |
Database driver for HSQLDB, a 100% Java database |
그루비에서 추가한 jar 파일을 인식할 수 있도록 미리 정의한 위치에 두도록 한다. 그루비 설치시 groovy-starter.conf 파일이 생기는데 파일을 열어보면
load ${user.home}/.groovy/lib/*
을 볼 수 있을 것이다. user.home 시스템 속성은 운영체제에서 설정한 것이다. 따라서 jar 파일은 사용자 홈디렉토리의 .groovy/lib 디렉토리(예: C:\Documents and Settings\gilbird\.groovy\lib)에 두기 바란다.
Hello, World
groovyConsole의 상단 창에서 다음을 입력하라.
println "Hello, World!"
그리고 <CTRL+R> 혹은 <CTRL+ENTER>를 누른다.
groovyConsole 창 하단에서 텍스트가 나오는 것을 확인 하면 다음과 같이 나온다.

다음은 산술식을 입력해보자.
123+45*67
위와 같은 산술식을 입력하여 <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
리스트와 맵
그루비에서는 두가지 중요한 내장 데이터 타입으로 리스트와 맵을 지원한다 (리스트는 자바 언어의 배열처럼 사용할 수 있다). 리스트는 순서있는 데이터를 저장할 때 사용한다. 예를 들어 정수 리스트는 다음과 같다.
myList = [1776, -1, 33, 99, 0, 928734928763]
리스트값은 각괄호 표현으로 액세스한다. (인덱스는 0부터 시작)
println myList[0]
위의 결과값은 1776이 나와야 한다.
리스트 길이는 "size" 메서드로 구한다.
println myList.size()
위의 결과값은 6이 나와야 한다.
그러나 일반적으로 길이값은 필요가 없다. 그 이유는 자바와 달리 "each" 메서드를 사용하면 모든 엘리먼트를 액세스하는 루프를 만들 수 있는데 "데이터로서의 코드(클로저)번역"절에서 세부적으로 다룬다.
또 다른 내장 데이터 형식으로 맵이 있다. 맵은 연상 배열(associative array)와 사전(dictionary)을 저장하는데 사용한다. 맵은 순서가 없는 이종의 이름 데이터이다. 예를 들어 이름과 IQ점수를 저장하고 싶다면 다음과 같이 하면 된다.
scores = [ "Brett":100, "Pete":"Did not finish", "Andrew":86.87934 ]
맵에 저장한 각 값의 형식이 다름에 주목하기 바란다. Brett의 값은 정수, Pete의 값은 문자열, Adrew의 값은 부동 소숫점수이다. 맵의 값은 두가지 방식으로 액세스 할 수 있다.
println scores["Pete"]
println scores.Pete
위 결의 결과는 다음과 같다.
Did not finish
Did not finish
데이터를 추가는 리스트에 값을 추가하는 것과 비슷하다. 예를 들어, Pete가 IQ 테스트를 다시 받아 3을 받았다면 다음과 같이 할 수 있다.
scores["Pete"] = 3
위의 값을 다시 액세스하면 3이 나와야 한다.
println scores["Pete"]
또한 다음과 같이 빈 리스트나 맵도 만들 수 있다.
emptyMap = [:]
emptyList = []
데이터가 비어 있는지 확인하려면 "size" 메서드로 값이 0 인지 확인한다.
println emptyMap.size()
println emptyList.size()
조건 실행 (Conditional Execution)
프로그래밍 언어의 가장 중요한 특징 중의 하나는 여러 조건에 따라서 각각 알맞은 코드를 수행하는 것이다. "if"문을 사용하면 제일 간단하게 조건문을 만들 수 있다.
amPM = Calendar.getInstance().get(Calendar.AM_PM)
if (amPM == Calendar.AM)
{
println("Good morning")
} else {
println("Good evening")
}
첫번째 라인은 현재 시간이 오전인지 오후인지 알아내는 코드라는 것만 알고 넘어가자. 나머지 코드는 다음과 같이 실행한다: 1) 괄호안의 수식을 비교한다. 그리고 결과가 "true"인지 "false"인지에 따라서 첫번째나 두번째 코드 블록을 실행한다. 아래에 있는 논리식을 참고하기 바란다.
"else" 블록은 없어도 되지만 "then" 블록은 꼭 있어야 한다.
amPM = Calendar.getInstance().get(Calendar.AM_PM)
if (amPM == Calendar.AM)
{
println("Have another cup of coffee.")
}
논리식 (Boolean Expression)
대부분의 프로그래밍 언어에는 "true"와 "false"를 표현하는데 사용하는 특별한 데이터 형식이 있다. 가장 간단한 논리식은 true, false값 자체이다. 논리값은 다른 데이터 형식과 마찬가지로 변수에 저장할 수 있다.
myBooleanVariable = true
보다 복잡한 논리식은 다음 논리연산자 중에서 하나를 사용하는 것이다.
* ==
* !=
* >
* >=
* <
* <=
위에서 나오는 논리 연산자 대부분은 직관적이다. 동등연산자(equality operator)는 할당연산자(assignment operator) "="와 구별하기 위하여 "=="로 사용하며 동등의 반대는 "!=" 연산자로서 같지 않다는 뜻이다.
다음은 논리 연산자 예제이다.
titanicBoxOffice = 1234600000
titanicDirector = "James Cameron"
trueLiesBoxOffice = 219000000
trueLiesDirector = "James Cameron"
returnOfTheKingBoxOffice = 752200000
returnOfTheKingDirector = "Peter Jackson"
theTwoTowersBoxOffice = 581200000
theTwoTowersDirector = "PeterJackson"
titanicBoxOffice > returnOfTheKingBoxOffice titanicBoxOffice >= returnOfTheKingBoxOffice titanicBoxOffice >= titanicBoxOffice titanicBoxOffice > titanicBoxOffice titanicBoxOffice + trueLiesBoxOffice < returnOfTheKingBoxOffice + theTwoTowersBoxOffice
titanicDirector > returnOfTheKingDirector titanicDirector < returnOfTheKingDirector titanicDirector >= "James Cameron" titanicDirector == "James Cameron"
특히 논리식은 "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로 특정 위치의 값이 비어있는지를 가리킨다.
디버깅과 해결팁
-
myVar.getClass()로 관심있는 변수의 클래스가 무엇인지 출력한다. 그리고 해당 클래스를 문서를 본다.
-
복잡한 수식에 문제가 생기면 단순한 수식으로 쪼개내어 분석한다.
-
groovyConsole을 재시작 해본다 (처음부터 시작할 수 있도록 모든 변수를 제거할 것이다).
-
그루비 사용자 가이드에서 관심있는 주제를 찾아 보기 바란다.
자바 개발자라면
-
자바와의 차이점을 알고 싶을 것이다.
-
그리고 주의할 사항도 알고 싶을 것이다.