SW/Groovy

Groovy : Lists, Sets, Maps 컬렉션 : 개념, 예제, 사용법, 개요

얇은생각 2025. 1. 12. 07:30
반응형

Groovy의 컬렉션 타입인 lists, sets, maps에 대해 알아보겠습니다. 이러한 데이터 구조는 객체 그룹을 관리하는 데 필수적입니다. 그 차이를 이해하면 프로그래밍 기술을 크게 향상시킬 수 있습니다. 예제와 실용적인 활용법을 알아보겠습니다.

 

Groovy : Lists, Sets, Maps 컬렉션 : 개념, 예제, 사용법, 개요

 

Groovy 컬렉션 소개

Groovy는 Java를 확장한 JVM 언어로, 동적이고 다양한 기능을 제공합니다. 그중 하나가 컬렉션에 대한 접근 방식으로, 코딩을 간단하고 직관적으로 만듭니다. Groovy에서 lists, sets, 그리고 maps는 모두 대괄호 안에 생성되며, 통일된 구문으로 기억하기 쉽습니다.

처음 Groovy를 사용했을 때, 컬렉션을 정의하고 조작하는 것이 얼마나 매끄러운지에 감탄했습니다. Java와 비교할 때, Groovy의 내장 메서드는 코딩을 훨씬 즐겁게 만들어 줍니다.

이번 포스트에서는 다음을 다룹니다:

  • Groovy의 Lists, Sets, 그리고 Maps 이해하기
  • 각 컬렉션 타입 간의 차이점
  • 실용적인 사용 사례와 예제
  • 컬렉션을 최대한 활용하기 위한 일반적인 메서드

 

Groovy에서 Lists 다루기

Lists는 Groovy에서 가장 기본적인 컬렉션 타입 중 하나입니다. 이는 순서가 있는 요소들의 시퀀스이며, Java의 ArrayList와 유사합니다. Lists는 중복을 허용하며, 대괄호 []를 사용해 생성됩니다.

 

List 정의하기

def languages = ["Java", "JavaScript", "Python"]

languages라는 이름의 리스트를 세 가지 요소로 생성했습니다. Java에서는 리스트 생성에 여러 줄이 필요할 수 있지만, Groovy는 한 줄로 간단하게 정의할 수 있습니다.

 

List 요소 접근하기

리스트의 요소에 접근하려면 인덱스를 사용하세요.

예를 들어, 두 번째 요소를 출력하려면:

println languages[1] // 출력: JavaScript

간단한 구문으로 Groovy는 스크립팅과 프로토타이핑에 적합합니다. 저는 종종 리스트를 작은 프로젝트나 데이터 처리 스크립트에 사용합니다.

 

일반적인 작업들

  • 요소 추가하기: << 연산자나 .add() 메서드를 사용합니다.
  • languages << "Groovy" languages.add("Kotlin")
  • 요소 제거하기: .remove()를 사용합니다.
  • languages.remove("Java")
  • 리스트 반복: .each 메서드를 사용합니다.
  • languages.each { language -> println language }

 

Groovy에서 Sets 탐색하기

Sets는 리스트와 비슷하지만, 중복을 허용하지 않습니다. 고유한 요소 모음이 필요할 때 유용합니다.

 

Set 정의하기

def uniqueLanguages = ["Java", "JavaScript", "Python", "Java"] as Set
println uniqueLanguages // 출력: [Java, JavaScript, Python]

Java가 한 번만 나타나는 것을 볼 수 있듯이, Sets는 고유성을 보장합니다.

 

기본 Set 유형

기본적으로 Groovy는 요소의 순서를 유지하는 LinkedHashSet을 사용합니다. 만약 정렬된 TreeSet이 필요하다면 다음과 같이 지정할 수 있습니다:

def sortedLanguages = ["Java", "JavaScript", "Python"] as TreeSet
println sortedLanguages // 출력: [Java, JavaScript, Python]

 

Groovy에서 Maps 사용하기

Maps는 키-값 쌍으로 이루어져 있으며, Java의 HashMap과 유사합니다. 관련 데이터를 다룰 때 유용합니다.

Map 정의하기

def courseDetails = [
    "courseName": "Gradle",
    "courseRating": 5,
    "price": 20
]

courseDetails는 세 개의 키-값 쌍으로 이루어진 Map입니다.

 

Map 요소 접근하기

  • 키 이름 사용하기:
  • println courseDetails.courseName // 출력: Gradle
  • 대괄호 표기법 사용하기:
  • println courseDetails["courseName"] // 출력: Gradle
  • .get() 메서드 사용하기:
  • println courseDetails.get("courseName") // 출력: Gradle

 

요소 추가 및 수정하기

courseDetails.review = "This course is amazing!"
courseDetails["price"] = 25

간단하게 기존 값을 수정하거나 새로운 키-값 쌍을 추가할 수 있습니다.

 

Map 반복하기

.each 메서드를 사용하여 Map을 반복할 수 있습니다:

courseDetails.each { key, value ->
    println "${key}: ${value}"
}

 

Groovy 컬렉션의 실용적인 응용

Lists의 사용 사례

  • 작업 관리: 순서가 중요한 작업 목록 관리
  • 데이터 처리: CSV 파일과 같은 데이터 세트 저장 및 반복

Sets의 사용 사례

  • 고유한 요소: 고유한 사용자 또는 항목 추적
  • 수학적 연산: 합집합, 교집합, 차집합 연산 수행

Maps의 사용 사례

  • 설정 저장: 사용자 설정과 같은 키-값 쌍 저장
  • 데이터 모델링: 학생이나 강좌와 같은 복잡한 엔터티 모델링

 

Groovy 컬렉션 사례

  • 사용 사례에 맞는 컬렉션 사용: 순서를 유지하고 중복을 허용해야 하면 리스트를, 고유성이 필요하면 Set을, 키-값 연관이 필요하면 Map을 사용
  • 내장 메서드 활용: .each, .findAll, .collect, .inject 등 다양한 메서드를 활용해 복잡한 작업을 단순화
  • 필요할 때 명시적으로 작성: 협업 프로젝트에서는 가독성이 중요하므로 명시적인 코드가 도움

 

자주 묻는 질문

1. Groovy에서 리스트와 셋의 차이점은?

  • 리스트는 중복을 허용하는 순서가 있는 컬렉션입니다. 셋은 중복되지 않는 요소들로 이루어진 순서 없는 컬렉션입니다.

2. Groovy에서 Map을 어떻게 생성하나요?

  • 키-값 쌍을 사용해 대괄호 안에 생성할 수 있습니다.
  • 예: def myMap = ["key1": "value1", "key2": "value2"].

3. Groovy 컬렉션에 Java의 컬렉션 메서드를 사용할 수 있나요?

  • 네, Groovy 컬렉션은 Java 컬렉션 메서드와 호환되므로 .clear(), .put() 등을 사용할 수 있습니다.
반응형