Groovy 문법 정리

Groovy 문법 정리

Groovy는 JVM에서 실행되는 동적 언어이다. 자바 라이브러리를 사용하고, 그루비 문법 또한 자바 문법과 거의 유사하다.

공부하면서 찾아보니 그루비가 스크립트 언어라는 글들이 많이 보였다. 스크립트 언어란 소스 코드를 컴파일하지 않고 실행할 수 있는 프로그래밍 언어이다. 그루비는 스크립트로도 잘 동작하지만 자바 바이트 코드로 컴파일되어 사용할 수도 있다. 그렇기에 스크립트 언어라고 칭하는 것은 정확하지 않다고 생각한다.

그루비 문법에 대해서 정리해보겠다.

1. 동적 타이핑.

def a = 1 def b = "asdfasdf" def c = [1,2,3,4,5]

2. 세미콜론 생략 가능. (ex. 파이썬)

3. 소괄호 생략가능.

println('a'); println 'a';

4. return 생략 가능.

5. 그루비는 문자열에 대해서 String, GString 두 가지 타입을 갖는다.

홀 따옴표로 선언한 문자열은 String 타입이며, 큰따옴표로 선언한 문자열은 GString 타입이다.

6. 그루비에서의 ==는 자바의 equals()와 같이 동작한다. 자바의 ==를 사용하고 싶다면 is(), ===를 사용해야 한다.

7. 그루비는 접근 제한자를 생략하면 Public이 된다. package-private로 설정하려면 @PackageScope 애노테이션을 사용해야 한다.

class Main { @PackageScope String name = "장진욱"; }

8. GroovyBeans는 getter와 setter를 명시적으로 정의하지 않아도 된다.

class Main { String name = "jinuk"; } Main main = new Main(); println main.getName(); // "jinuk"

9. 연산자 오버 로딩.

10. Collections

List의 경우 중괄호는 클로저의 예약어이므로 대괄호를 사용한다.

// list int[] arr = [1,2,3,4,5]; List l1 = [1,2,3,4] def arr2 = new int[] {1,2,3,4,5}; // 그루비 3.0 버전 이상부터 사용 가능. def arr3 = ['a', 1, false, user]; def arr4 = []; // 빈 리스트 list += [1,2,3,4,5]; // 리스트에 요소 추가 list.add(6); list << 7 << 8; assert list == [1,2,3,4,5,6,7,8]; assert list[-1] == 8; // 인덱스를 음수로 주면 역순. 마치 파이썬. // map def map = ['a': 1, 'b':2]; map += ['c': 3]; map += ['d': ['qwe': 4444]]; map['c'] = 222; // range def range = 1..10; assert range == [1,2,3,4,5,6,7,8,9,10]; range = 'a'..'c'; assert range == ['a','b','c'];

11. Closures

클로저는 함수에 함수를 넘기는 용도로 사용된다. 함수형 언어의 특징이라고 볼 수 있다. 클로저의 정의는 중괄호 { }를 사용하며, 호출하는 방법은. call(), 클로저명()으로 실행할 수 있다.

def clos1 = { println 'hi'; } clos1.call() // "hi" clos1(); "hi" def clos2 = {name -> println "${name}"; } clos2('hello') // "hello" // 클로저를 인자로 받는 함수, def clos3(num, closure) { closure(num*10) } timesTen(10, {n -> println(n)}) // 100 // 파라미터 넣는 부분이 하나인 경우 it 활용 가능. timesTen(10,{println it})

Groovy Tutorial https://www.tutorialspoint.com/execute_groovy_online.php

from http://jinukix.tistory.com/100 by ccl(A) rewrite - 2021-11-15 11:27:20