Skip to content

Groovy의 주요 문법

Groovy는 Java 플랫폼 기반의 유연한 프로그래밍 언어로, Python, Ruby, Smalltalk의 강력한 특징들을 결합하고 있습니다. 다음은 Groovy의 주요 문법으로, 빠르게 익힐 수 있도록 정리한 내용입니다.

변수 선언

Groovy에서는 def 키워드를 사용하거나 명시적으로 타입을 지정하여 변수를 선언할 수 있습니다.

groovy
// def 키워드 사용
def name = "Groovy"

// 명시적 타입 지정
String greeting = "Hello, ${name}!"

데이터 타입

Groovy는 정수형, 실수형, 불린형, 문자열 등 다양한 데이터 타입을 지원합니다.

groovy
def a = 10          // 정수형
def b = 10.5        // 실수형
def c = true        // 불린형
def d = "Groovy"    // 문자열

논리 연산

Groovy는 && (논리 AND), || (논리 OR), ! (논리 NOT) 등의 논리 연산자를 지원합니다.

groovy
def a = 10
def b = 20

if (a > 0 && b > 0) {
    println "두 수 모두 양수입니다"
} else if (a > 0 || b > 0) {
    println "최소 하나의 수가 양수입니다"
} else {
    println "두 수 모두 음수가 아닙니다"
}

조건문

Groovy는 if-elseswitch 조건문을 지원합니다.

groovy
def number = 10
if (number > 0) {
    println "숫자는 양수입니다"
} else {
    println "숫자는 음수입니다"
}

switch (number) {
    case 0:
        println "숫자는 0입니다"
        break
    case { it > 0 }:
        println "숫자는 양수입니다"
        break
    default:
        println "숫자는 음수입니다"
}

반복문

Groovy는 for, while, do-while 반복문을 지원합니다.

groovy
// for 반복문
for (i in 0..9) {
    println i
}

// while 반복문
def i = 0
while (i < 10) {
    println i++
}

// do-while 반복문
def j = 0
do {
    println j++
} while (j < 10)

문자열

문자열 연결

Groovy에서는 + 연산자나 ${} 구문을 사용하여 문자열을 연결할 수 있습니다.

groovy
def name = "Groovy"
def greeting = "Hello, " + name + "!"
println greeting  // 출력: Hello, Groovy!

def greeting2 = "Hello, ${name}!"
println greeting2  // 출력: Hello, Groovy!

문자열 자르기

substring 메서드를 사용하여 문자열의 일부를 추출할 수 있습니다.

groovy
def str = "Hello, Groovy!"
println str.substring(7)  // 출력: Groovy!
println str.substring(0, 5)  // 출력: Hello

문자열 치환

replace 메서드를 사용하여 문자열 내의 특정 부분을 교체할 수 있습니다.

groovy
def str = "Hello, Groovy!"
println str.replace("Groovy", "Java")  // 출력: Hello, Java!

문자열 분할

split 메서드를 사용하여 문자열을 배열로 분할할 수 있습니다.

groovy
def str = "Hello, Groovy!"
def parts = str.split(", ")
println parts[0]  // 출력: Hello
println parts[1]  // 출력: Groovy!

문자열 분할 및 값 접근

tokenize 메서드를 사용하여 문자열을 리스트로 분할하고, 인덱스를 통해 특정 부분에 접근할 수 있습니다.

groovy
def str = "Hello, Groovy!"
println str.tokenize(",")[1]  // 출력: Groovy!

문자열 정리

trim 메서드를 사용하여 문자열 양쪽의 공백을 제거할 수 있습니다.

groovy
def str = "  Hello, Groovy!  "
println str.trim()  // 출력: Hello, Groovy!

문자열 길이

length 속성을 사용하여 문자열의 길이를 확인할 수 있습니다.

groovy
def str = "Hello, Groovy!"
println str.length()  // 출력: 14

문자열 포함 여부

contains 메서드를 사용하여 문자열이 특정 하위 문자열을 포함하는지 확인할 수 있습니다.

groovy
def str = "Hello, Groovy!"
println str.contains("Groovy")  // 출력: true

문자열 검색

indexOf 메서드를 사용하여 문자열 내에서 특정 하위 문자열의 위치를 찾을 수 있습니다.

groovy
def str = "Hello, Groovy!"
println str.indexOf("Groovy")  // 출력: 7

문자열 비교

==, !=, <, >, <=, >= 등의 연산자를 사용하여 문자열을 비교할 수 있습니다.

groovy
def str1 = "Hello, Groovy!"
def str2 = "Hello, Java!"
println str1 == str2  // 출력: false
println str1 != str2  // 출력: true
println str1 < str2  // 출력: true
println str1 > str2  // 출력: false
println str1 <= str2  // 출력: true
println str1 >= str2  // 출력: false

문자열 이스케이프

\를 사용하여 특수 문자를 이스케이프할 수 있습니다. 예를 들어 \n은 줄바꿈 문자를 나타냅니다.

groovy
def str = "Hello,\nGroovy!"
println str  // 출력: Hello,
             // Groovy!

문자열 템플릿

Groovy는 ${} 구문을 사용하여 문자열 내에 변수를 삽입할 수 있습니다.

groovy
def name = "Groovy"
def greeting = "Hello, ${name}!"
println greeting  // 출력: Hello, Groovy!

문자열 정규 표현식 일치

==~ 연산자를 사용하여 정규 표현식과 문자열의 일치 여부를 확인할 수 있습니다.

groovy
def emailPattern = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/
def str = "google@163.com"
println str ==~ emailPattern  // 출력: true

다중 행 문자열

""" 또는 ''' 세 개의 따옴표를 사용하여 다중 행 문자열을 정의할 수 있습니다.

groovy
def multiLineStr = """
    This is a multi-line
    string in Groovy.
"""
println multiLineStr

리스트(List)

Groovy에서 리스트는 다양한 타입의 요소를 포함할 수 있는 자주 사용되는 데이터 구조입니다. 다음은 Groovy 리스트 작업의 주요 문법입니다.

리스트 정의

대괄호 []를 사용하여 리스트를 정의할 수 있습니다.

groovy
def list = [1, 2, 3, 'Groovy', true]

리스트 요소 접근

인덱스를 사용하여 리스트의 요소에 접근할 수 있으며, 인덱스는 0부터 시작합니다.

groovy
def list = [1, 2, 3, 'Groovy', true]
println list[3]  // 출력: Groovy

리스트 요소 수정

인덱스를 통해 리스트의 요소를 수정할 수 있습니다.

groovy
def list = [1, 2, 3, 'Groovy', true]
list[3] = 'Java'
println list  // 출력: [1, 2, 3, 'Java', true]

리스트 요소 추가

add 메서드나 왼쪽 이동 연산자 <<를 사용하여 리스트에 요소를 추가할 수 있습니다.

groovy
def list = [1, 2, 3]
list.add(4)
println list  // 출력: [1, 2, 3, 4]

list << 5
println list  // 출력: [1, 2, 3, 4, 5]

리스트 요소 삭제

remove 메서드를 사용하여 리스트에서 요소를 삭제할 수 있습니다.

groovy
def list = [1, 2, 3, 4, 5]
list.remove(0)
println list  // 출력: [2, 3, 4, 5]

리스트 길이

size 메서드를 사용하여 리스트의 길이를 확인할 수 있습니다.

groovy
def list = [1, 2, 3, 4, 5]
println list.size()   // 출력: 5

리스트 순회

for 루프를 사용하여 리스트의 각 요소를 순회할 수 있습니다.

groovy
def list = [1, 2, 3, 4, 5]
for (item in list) {
    println item
}

또는 each 메서드를 사용하여 리스트의 모든 요소를 순회할 수도 있습니다.

groovy
def list = [1, 2, 3, 4, 5]
list.each { println it }

리스트 변환

collect 메서드를 사용하여 리스트의 각 요소를 변환할 수 있습니다.

groovy
def list = [1, 2, 3, 4, 5]
def newList = list.collect { it * 2 }
println newList  // 출력: [2, 4, 6, 8, 10]

리스트 필터링

find

조건을 만족하는 첫 번째 요소를 반환합니다.

groovy
def list = [1, 2, 3, 4, 5]
println list.find { it % 2 == 0 }  // 출력: 2

findAll

조건을 만족하는 모든 요소를 포함한 새로운 리스트를 반환합니다.

groovy
def list = [1, 2, 3, 4, 5]
def newList = list.findAll { it % 2 == 0 }
println newList  // 출력: [2, 4]

리스트 일치 검사

any

조건을 만족하는 요소가 적어도 하나라도 있는지 확인합니다.

groovy
def list = [1, 2, 3, 4, 5]
println list.any { it % 2 == 0 }  // 출력: true

every

조건을 만족하는 모든 요소가 있는지 확인합니다.

groovy
def list = [1, 2, 3, 4, 5]
println list.every { it % 2 == 0 }  // 출력: false

리스트 슬라이싱

subList 메서드를 사용하여 리스트의 일부를 추출할 수 있습니다.

groovy
def list = [1, 2, 3, 4, 5]
println list.subList(1, 4)  // 출력: [2, 3, 4]

리스트 정렬

sort 메서드를 사용하여 리스트를 정렬할 수 있습니다.

groovy
def list = [3, 1, 4, 2, 5]
println list.sort()  // 출력: [1, 2, 3, 4, 5]

리스트 역순 정렬

reverse 메서드를 사용하여 리스트를 역순으로 정렬할 수 있습니다.

groovy
def list = [1, 2, 3, 4, 5]
println list.reverse()  // 출력: [5, 4, 3, 2, 1]

리스트 포함 여부

contains 메서드를 사용하여 리스트에 특정 요소가 포함되어 있는지 확인할 수 있습니다.

groovy
def list = [1, 2, 3, 4, 5]
println list.contains(3)  // 출력: true
println list.contains(6)  // 출력: false

리스트 합치기

plus 메서드나 + 연산자를 사용하여 두 개의 리스트를 합칠 수 있습니다.

groovy
def list1 = [1, 2, 3]
def list2 = [4, 5, 6]
println list1.plus(list2)  // 출력: [1, 2, 3, 4, 5, 6]
println list1 + list2      // 출력: [1, 2, 3, 4, 5, 6]

리스트 비우기

clear 메서드를 사용하여 리스트를 비울 수 있습니다.

groovy
def list = [1, 2, 3, 4, 5]
list.clear()
println list  // 출력: []

맵(Map)

Groovy에서 맵은 키-값 쌍을 저장하는 데 사용되는 자주 사용되는 데이터 구조입니다. 다음은 Groovy 맵 작업의 주요 문법입니다.

맵 정의

대괄호 [:]나 중괄호 {}를 사용하여 맵을 정의할 수 있습니다.

groovy
def map = [:]
map = ["name": "Groovy", "version": 2.5]

맵 요소 접근

키를 통해 맵의 값을 접근할 수 있습니다.

groovy
def map = ["name": "Groovy", "version": 2.5]
println map["name"]  // 출력: Groovy

맵 요소 수정

키를 통해 맵의 값을 수정할 수 있습니다.

groovy
def map = ["name": "Groovy", "version": 2.5]
map["name"] = "Java"
println map  // 출력: [name:Java, version:2.5]

맵 요소 추가

put 메서드나 직접 할당을 통해 맵에 요소를 추가할 수 있습니다.

groovy
def map = ["name": "Groovy"]
map.put("version", 2.5)
println map  // 출력: [name:Groovy, version:2.5]

map["author"] = "James"
println map  // 출력: [name:Groovy, version:2.5, author:James]

맵 요소 삭제

remove 메서드를 사용하여 맵에서 요소를 삭제할 수 있습니다.

groovy
def map = ["name": "Groovy", "version": 2.5]
map.remove("version")

println map // 출력 [name:Groovy]


### 맵 크기

`size` 메서드를 사용하여 맵의 크기를 확인할 수 있습니다.

```groovy
def map = ["name": "Groovy", "version": 2.5]
println map.size()  // 출력 2

맵 순회

each 메서드를 사용하여 맵의 키-값 쌍을 순회할 수 있습니다.

groovy
def map = ["name": "Groovy", "version": 2.5]
map.each { key, value ->
    println "${key}: ${value}"
}

키 또는 값 검사

containsKeycontainsValue 메서드를 사용하여 맵에 특정 키나 값이 존재하는지 확인할 수 있습니다.

groovy
def map = ["name": "Groovy", "version": 2.5]
println map.containsKey("name")  // 출력 true
println map.containsValue(2.5)  // 출력 true

맵 비우기

clear 메서드를 사용하여 맵을 비울 수 있습니다.

groovy
def map = ["name": "Groovy", "version": 2.5]
map.clear()
println map  // 출력 [:]

맵 병합

putAll 메서드를 사용하여 한 맵의 모든 요소를 다른 맵에 병합할 수 있습니다.

groovy
def map1 = ["name": "Groovy"]
def map2 = ["version": 2.5]
map1.putAll(map2)
println map1  // 출력 [name:Groovy, version:2.5]

모든 키 또는 값 가져오기

keySetvalues 메서드를 사용하여 맵의 모든 키 또는 값을 가져올 수 있습니다.

groovy
def map = ["name": "Groovy", "version": 2.5]
println map.keySet()  // 출력 [name, version]
println map.values()  // 출력 [Groovy, 2.5]

함수

Groovy에서는 함수를 메서드(Method)라고 부르며, 클래스 내부나 스크립트의 일부로 정의할 수 있습니다. 다음은 Groovy에서 함수를 정의하고 호출하는 일반적인 문법입니다.

함수 정의

def 키워드를 사용하여 함수를 정의할 수 있습니다.

groovy
def greet(name) {
    return "Hello, ${name}!"
}

함수 호출

함수를 정의한 후에는 함수 이름과 매개변수를 통해 호출할 수 있습니다.

groovy
def result = greet("Groovy")
println result  // 출력 Hello, Groovy!

기본 매개변수를 가진 함수

함수를 정의할 때 매개변수에 기본값을 지정할 수 있습니다.

groovy
def greet(name = "World") {
    return "Hello, ${name}!"
}

println greet()        // 출력 Hello, World!
println greet("Groovy") // 출력 Hello, Groovy!

여러 매개변수를 가진 함수

여러 개의 매개변수를 받는 함수를 정의할 수 있습니다.

groovy
def add(a, b) {
    return a + b
}

println add(3, 5)  // 출력 8

익명 함수

익명 함수를 정의하고 이를 변수에 할당하거나 매개변수로 전달할 수 있습니다.

groovy
def multiply = { a, b -> a * b }
println multiply(3, 5)  // 출력 15

가변 인자를 가진 함수

가변 수의 인자를 받는 함수를 정의할 수 있습니다.

groovy
def sum(... numbers) {
    def total = 0
    for (number in numbers) {
        total += number
    }
    return total
}

println sum(1, 2, 3, 4)  // 출력 10

클로저를 매개변수로 받는 함수

클로저(Closure)를 매개변수로 받는 함수를 정의할 수 있습니다.

groovy
def operate(a, b, closure) {
    return closure(a, b)
}

def add = { x, y -> x + y }
println operate(3, 5, add)  // 출력 8

여러 값을 반환하는 함수

여러 값을 반환하는 함수를 정의할 수 있으며, 반환된 값들은 리스트로 처리됩니다.

groovy
def getCoordinates() {
    return [10, 20]
}

def (x, y) = getCoordinates()
println "x: ${x}, y: ${y}"  // 출력 x: 10, y: 20

재귀 함수

함수 내부에서 자신을 다시 호출하는 재귀 함수를 정의할 수 있습니다.

groovy
def factorial(n) {
    if (n <= 1) {
        return 1
    } else {
        return n * factorial(n - 1)
    }
}

println factorial(5)  // 출력 120