그루비
(Groovy)는
자바
에
파이썬
,
루비
,
스몰토크
等의 特徵을 더한
動的
客體 志向
프로그래밍 言語
이다.
特徵
[
編輯
]
- 자바 假想 머신
에서 作動하는 動的 타이핑 프로그래밍 言語이다.
- 자바
의 强點 위에
파이썬
,
루비
,
스몰토크
等의 프로그래밍 言語에 影響을 받은 特長點을 더하였다.
- 자바
프로그래머들이 많은 學習을 하지 않고도 最新 프로그래밍 技法을 使用할 수 있다.
- 도메인 專門 言語와 單純化된 文法을 支援하여 코드를 읽고 維持 補修하기 便해진다.
歷史
[
編輯
]
2002年
英國
出身의 프로그래머인
제임스 스트라칸
에 依해 創始되었으며 現在
아파치 使用 許可書 2.0
아래에 소스와 바이너里가 配布, 公開되어 있다.
2012年 6月 2日 2.0버전이 出市되었다.
哲學
[
編輯
]
그루비의 創始者
제임스 스트라칸
은 그루비의 가장 重要한 點이 타입이 柔軟 簡潔한 動的인 프로그래밍 言語라고 한다.
자바와의 比較
[
編輯
]
그루비의 文法 體系는 자바의 것을 繼承 發展시켰다. 자바에는 없는 簡便 表記法(syntactic sugar)을 支援하는 外에 리스트, 맵, 정규식을 위한 構文을 提供함으로써 프로그래밍을 쉽고 簡潔하게 해 준다. 더구나
LISP
言語 初期부터 있어 왔던
클로저
를 導入함으로써
메타프로그래밍
이 可能하게 하였다. 자바假像機械(JVM) 上에서 動作하는 動的인 스크립팅 言語
Jython
,
JRuby
,
Jacl
,
Rhino
,
LuaJava
等에 비해 遜色이 없으며, 짧은 歷史에도 不拘하고 빠른 發展을 하고 있다.
자바 소스는 컴파일해야만 使用할 수 있지만, 그루비 소스는 스크립트 파일 그대로 實行시킬 수도 있고, 자바처럼 컴파일하여 쓸 수도 있다. 거의 大部分의 자바 소스는 파일 擴張字만 바꾸면 修正 없이 그루비에서도 쓸 수 있다.
다음은 標準 Java 5+의 예제이다.
public
class
StdJava
{
public
static
void
main
(
String
argv
[]
)
{
for
(
String
it
:
new
String
[]
{
"Rod"
,
"Carlos"
,
"Chris"
})
if
(
it
.
length
()
<=
4
)
System
.
out
.
println
(
it
);
}
}
그루비를 使用하면 아래처럼 簡單하게 表現할 수 있다.
[
"Rod"
,
"Carlos"
,
"Chris"
].
findAll
{
it
.
size
()
<=
4
}.
each
{
println
it
}
道具
[
編輯
]
groovy
[
編輯
]
- 가장 많이 쓰는 그루비 스크립트 實行 道具
- 實行 예: groovy hello.groovy
groovyc
[
編輯
]
- 자바 쪽에서 불러 쓸 수 있는 라이브러리 만들 때 쓰는 그루비 컴파일러
- 內容은 자바 소스와 거의 같으나 파일 擴張名을 groovy로 하여 貯藏한다.
(소스 파일名: HelloWorld.groovy)
public
class
HelloWorld
{
public
static
void
main
(
String
[]
args
)
{
println
"Hello, World!"
}
}
- 미리 環境變數 CLASSPATH를 設定한다. (java로 實行할 때 必要함)
- 윈도
>
set CLASSPATH=
%GROOVY_HOME%
\embeddable\groovy-all-1.7.3.jar
- 유닉스/리눅스
$
export
CLASSPATH
=
$GROOVY_HOME
/embeddable/groovy-all-1.7.3.jar
>
groovyc -d . HelloWorld.groovy
>
java -classpath .;
%CLASSPATH%
HelloWorld
groovysh
[
編輯
]
>
groovysh
Groovy
Shell
(
1.7
.
3
,
JVM:
1.6
.
0
_21
)
Type
'help'
or
'\h'
for
help
.
-------------------------------------------------------------------------------
groovy:
000
>
println
"Hello"
Hello
===>
null
groovy:
000
>
exit
예제
[
編輯
]
基本的인 코드
[
編輯
]
groovy:
000
>
"Groovy is groovy"
.
length
()
===>
16
groovy:
000
>
"Rick"
.
indexOf
(
"k"
)
===>
3
- 클래스의 政敵 메소드(static method) 呼出
groovy:
000
>
Math
===>
class
java
.
lang
.
Math
groovy:
000
>
Math
.
abs
(-
75
)
===>
75
컬렉션(collection)
[
編輯
]
리스트(list)
[
編輯
]
groovy:
000
>
a
=
[
1
,
'hi'
,
3.14
,
1
,
2
,
[
4
,
5
]]
===>
[
1
,
hi
,
3.14
,
1
,
2
,
[
4
,
5
]]
groovy:
000
>
a
[
2
]
===>
3.14
groovy:
000
>
a
.
reverse
()
===>
[[
4
,
5
],
2
,
1
,
3.14
,
hi
,
1
]
groovy:
000
>
a
.
flatten
()
===>
[
1
,
hi
,
3.14
,
1
,
2
,
4
,
5
]
groovy:
000
>
a
.
flatten
().
unique
()
===>
[
1
,
hi
,
3.14
,
2
,
4
,
5
]
맵(map)
[
編輯
]
groovy
>
hash
=
[
'water'
:
'wet'
,
'fire'
:
'hot'
]
groovy
>
println
hash
[
'fire'
]
groovy
>
hash
.
each
{
key
,
value
->
groovy
>
println
"${key} is ${value}"
groovy
>
}
hot
water
is
wet
fire
is
hot
Result:
[
"water"
:
"wet"
,
"fire"
:
"hot"
]
制御救助
[
編輯
]
groovy
>
if
(
"fablic"
.
length
()
>
3
)
groovy
>
println
'ya'
groovy
>
else
groovy
>
println
'nop'
ya
groovy
>
def
n
=
0
groovy
>
while
(
n
<
3
){
groovy
>
println
n
++
groovy
>
}
0
1
2
- 一部 制御救助는 半卜者(iterator)로 代身할 수 있다.
클로저(closure)와 半卜者(iterator)
[
編輯
]
反復 處理
[
編輯
]
groovy
>
def
list
=
[
1
,
2
,
5
,
13
,
21
]
groovy
>
def
n
=
0
groovy
>
while
(
n
<
list
.
size
())
{
groovy
>
list
[
n
++]
*=
2
groovy
>
}
groovy
>
list
Result:
[
2
,
4
,
10
,
26
,
42
]
groovy
>
def
list
=
[
1
,
2
,
5
,
13
,
21
]
groovy
>
list
.
collect
{
it
*
2
}
Result:
[
2
,
4
,
10
,
26
,
42
]
groovy
>
3
.
times
{
println
(
'foobar'
)
}
foobar
foobar
foobar
再歸呼出(recursive call)로 計算하는 팩토리얼
[
編輯
]
def
recfact
(
v
,
k
)
{
if
(
k
<=
1
)
return
v
else
recfact
(
v
*
k
,
k
-
1
)
}
def
factorial
(
n
)
{
return
recfact
(
1
,
n
)
}
for
(
m
in
0
..<
10
)
println
"$m! = ${factorial(m)}"
實行 結果:
0! = 1
1! = 1
2! = 2
3! = 6
4! = 24
5! = 120
6! = 720
7! = 5040
8! = 40320
9! = 362880
같이 보기
[
編輯
]
各州
[
編輯
]
外部 링크
[
編輯
]