프로그래밍 언어 그루비(Groovy) 특징

주말을 이용해 그루비 언어 가이드(Groovy – Language Guide)를 읽고 그루비의 특징들을 한 번 정리해보았다.

일단 그루비는 파이썬, 루비, 펄과 같은 스크립트 언어의 편리함은 기존의 자바 개발자들에게 제공하는 것이 제1의 목표인듯 하다. 따라서 전체적으로 파이썬이나 루비와 비슷한 느낌을 주되 자바 프로그래머가 직관적으로 사용할 수 있게 설계하였다.

그 예로 그루비는 List나 Map을 언어 차원에서 제공하지만, 이는 궁극적으로 java.util.List와 java.util.Map이 매핑(mapping) 된다. 또 closure를 비롯한 여러 language construct들도 다양한 문법적 편의(syntatic sugar)를 제공하지만 궁극적으로 자바 클래스의 메쏘드를 호출해 주는 경우가 많다. Basic Type들도 Java Primitive Type과 java.math.BigDecimal 등에 매핑되어 있는 구조다.

내부적으로 그루비의 클래스 하나가 바이트코드 상에서 자바 클래스와 1:1로 대응하기 때문에 자바는 그루비 코드를 임베딩(embedding) 할 수 있고, 그루비에서 자바 클래스를 자유롭게 이용할 수 있다.

언어는 다르지만 자바와 그루비 모두 궁극적으로 바이트코드로 변환되어 수행되기 때문에, 랭귀지 런타임 자체는 차이가 없는 셈이다. 결국 자바 대신 그루비를 택한다면 이는 스크립트 언어가 제공하는 독특한 편의성 때문일텐데, 이를 정리해 보면 다음과 같다.

클래스 없는 Plain Scripts의 지원

자바처럼 최소 하나 이상의 클래스(class)가 존재해서 public static void main(String[] args) method가 엔트리 포인트(entry point)가 되는 것이 아니라 스크립트를 읽어 차례대로 statements를 수행할 수 있다. 또 클래스에 속하지 않은 first-order function을 def 문을 이용해 파이썬과 비슷한 형태로 만들 수 있다. (물론 바이트코드로 번역될 때 내부적으로 Class를 생성한다)

클로저(Closure)의 지원

Functional Language의 패러다임(paradigm)인 closure는 function을 argument처럼 넘겨주고 받을 수 있다는 점 때문에 imperative/oo language에서도 유용성이 있다.

[1,2,3,4].each { println(it) }

위 예는 리스트를 iteration해서 결과를 보여주는데 무척 유용하다.

Lists, Ranges, Maps 등의 native 지원

보다 복잡한 데이타 구조(data structure)를 지원하는 것은 스크립트 언어의 미덕인 된 듯하다. 파이썬의 예에서 이미 어느정도 검증되었듯이, 속도에 대한 고려가 크게 없다면 Lists나 Maps 등을 언어 차원에서 지원하는 것은 빠른 프로토타이핑에 매우 유용하다.

Slicing with Subscript Operator

각종 데이타 구조에서 필요한 elements를 쉽게 뽑아내는 방법인 slicing도 어느정도 범용성을 인정받는듯 하다. 마이너스 인덱스(minus index)를 이용해서 뒤에서부터 slicing을 하거나, reverse slicing을 이용해 문자열을 거꾸로 뽑아낸다던지 하는 것도 가능한데, 문자열(string)처리가 주인 스크립트 언어의 특징에 부합하는 부분이다.

정규 표현식(Regular Expression)의 지원

펄(Perl)이 스크립트 언어로서 강력함을 발휘할 수 있었던 이유는 정규 표현식(regular expression)을 언어 차원에서 지원함으로써, 문자열(string)을 다루는 간단한 프로그램들을 매우 빨리 짤 수 있었다는 점일 것이다.

Dynamic Typing

자바는 Static Typing에 기반한 언어이나 그루비는 스크립트 언어의 특성상 Dynamic Typing을 허용한다. return type이나 argument type을 생략할 경우 이는 java.lang.Object에 매핑하도록 만들어놨다.

의견

아직 스크립트 언어에 익숙치 않아서 각각의 언어 요소가 생산성이나 효율에 어느정도 영향을 미치는지 가늠하기가 힘들다. 위의 요소들은 최근에 널리 사용되는 스크립트 언어들에서 어느정도 그 유용성을 인정받고 있는것 만큼은 분명한 것 같고 이에 그루비는 이런 요소들을 포함시켰을 것이다. 각각의 요소가 어떤 영향을 미치는지는 좀 더 깊이 생각해 봐야겠다.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s