한국   대만   중국   일본 
아파치 그루비 - 위키百科, 우리 모두의 百科事典 本文으로 移動

아파치 그루비

위키百科, 우리 모두의 百科事典.

그루비(Groovy)
패러다임 多重 패러다임
設計者 제임스 스트라칸
開發者 글라우美 羅布어
發表日 2003年
最近 버전 4.0.5
最近 버전 出市日 2022年 9月 6日 (20個月 前) ( 2022-09-06 ) [1]
미리보기 버전 4.0.0-beta-1
미리보기 버전 出市日 2021年 9月 6日 (2年 前) ( 2021-09-06 ) [1]
資料型 體系 不規則, 動的 타이핑
運營 體制 자바 假想 머신
라이선스 아파치 許可書 2.0
웹사이트 http://www.groovy-lang.org/
主要 具現體
Groovy
影響을 받은 言語
자바 , 루비 , 파이썬 , 스몰톡
影響을 준 言語
제이루비

그루비 (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

같이 보기 [ 編輯 ]

各州 [ 編輯 ]

  1. “Releases - apache/groovy” . 2022年 9月 27日에 確認함 GitHub 經由.  

外部 링크 [ 編輯 ]