아파치 그루비
그루비(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
groovyc
(소스 파일명: HelloWorld.groovy) public class HelloWorld {
public static void main(String[] args) {
println "Hello, World!"
}
}
>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
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
클로저(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
같이 보기각주
외부 링크 |
Index:
pl ar de en es fr it arz nl ja pt ceb sv uk vi war zh ru af ast az bg zh-min-nan bn be ca cs cy da et el eo eu fa gl ko hi hr id he ka la lv lt hu mk ms min no nn ce uz kk ro simple sk sl sr sh fi ta tt th tg azb tr ur zh-yue hy my ace als am an hyw ban bjn map-bms ba be-tarask bcl bpy bar bs br cv nv eml hif fo fy ga gd gu hak ha hsb io ig ilo ia ie os is jv kn ht ku ckb ky mrj lb lij li lmo mai mg ml zh-classical mr xmf mzn cdo mn nap new ne frr oc mhr or as pa pnb ps pms nds crh qu sa sah sco sq scn si sd szl su sw tl shn te bug vec vo wa wuu yi yo diq bat-smg zu lad kbd ang smn ab roa-rup frp arc gn av ay bh bi bo bxr cbk-zam co za dag ary se pdc dv dsb myv ext fur gv gag inh ki glk gan guw xal haw rw kbp pam csb kw km kv koi kg gom ks gcr lo lbe ltg lez nia ln jbo lg mt mi tw mwl mdf mnw nqo fj nah na nds-nl nrm nov om pi pag pap pfl pcd krc kaa ksh rm rue sm sat sc trv stq nso sn cu so srn kab roa-tara tet tpi to chr tum tk tyv udm ug vep fiu-vro vls wo xh zea ty ak bm ch ny ee ff got iu ik kl mad cr pih ami pwn pnt dz rmy rn sg st tn ss ti din chy ts kcg ve
Portal di Ensiklopedia Dunia