학습
Scala 고급 컬렉션 처리
Scala 고급 컬렉션 처리 — 고급
고급 컬렉션 처리
1. 도입 (왜 배워야 하는가)
Scala는 강력하고 유연한 컬렉션 프레임워크를 제공하여 데이터를 효율적으로 처리할 수 있게 해줍니다. 고급 컬렉션 처리 기법을 익히면 데이터의 변환, 필터링, 집계 등을 더 간단하게 수행할 수 있습니다. 실무에서는 대규모 데이터셋을 처리할 때 이러한 기법이 필수적입니다. 만약 이 주제를 이해하지 못하면, 복잡한 데이터 구조를 관리하거나 성능 최적화를 하는 데 어려움을 겪을 수 있습니다. 결국, 이는 코드의 가독성과 유지보수성에 큰 영향을 미치게 됩니다.
2. 핵심 개념 설명
- 컬렉션 (Collection): 데이터를 모아놓은 집합으로, 리스트(List), 세트(Set), 맵(Map) 등 다양한 형태가 있습니다. 실생활에서 책을 장르별로 정리한 것과 비유할 수 있습니다.
- 변환 (Transformation): 컬렉션의 데이터를 다른 형태로 변경하는 과정입니다. 예를 들어, 장르별로 정리된 책을 제목만 뽑아서 리스트로 만드는 것과 같습니다.
- 필터링 (Filtering): 조건에 맞는 데이터만 선택하는 과정입니다. 마트에서 신선한 과일만 고르는 것과 비슷합니다.
- 집계 (Aggregation): 데이터를 요약하여 의미 있는 정보를 추출하는 과정입니다. 예를 들어, 한 달 동안의 매출을 합산하는 것과 같습니다.
| 용어 | 설명 |
|---|---|
| 컬렉션 | 데이터를 모아놓은 집합 |
| 변환 | 데이터를 다른 형태로 변경하는 과정 |
| 필터링 | 조건에 맞는 데이터만 선택하는 과정 |
| 집계 | 데이터를 요약하여 의미 있는 정보를 추출 |
3. 기본 코드 예제
다음은 리스트의 각 요소를 제곱하는 기본적인 변환 예제입니다.
val numbers = List(1, 2, 3, 4, 5) // 1부터 5까지의 숫자 리스트 생성
val squared = numbers.map(n => n * n) // 각 숫자를 제곱하여 새로운 리스트 생성
println(squared) // 결과 출력
실행 결과:
List(1, 4, 9, 16, 25)
val numbers = List(1, 2, 3, 4, 5): 1부터 5까지의 숫자가 포함된 리스트를 생성합니다.val squared = numbers.map(n => n n): map 메서드를 사용하여 리스트의 각 요소를 제곱합니다. n => n n은 각 요소를 제곱하는 함수입니다.println(squared): 제곱된 결과를 출력합니다.4. 실전 활용 예제
예제 1: 쇼핑몰에서 장바구니 구현
사용자가 장바구니에 담은 상품의 가격을 모두 더하는 예제입니다.
case class Product(name: String, price: Double) // 상품 클래스 정의
val cart = List(Product("사과", 1000), Product("바나나", 1500), Product("체리", 2000)) // 장바구니 생성
val totalPrice = cart.map(_.price).sum // 각 상품의 가격을 더하여 총 가격 계산
println(s"총 가격: $totalPrice 원") // 결과 출력
실행 결과:
총 가격: 4500.0 원
예제 2: 회원 데이터 필터링
회원 중에서 특정 연령대에 해당하는 회원을 찾는 예제입니다.
case class Member(name: String, age: Int) // 회원 클래스 정의
val members = List(Member("홍길동", 25), Member("김철수", 30), Member("이영희", 20)) // 회원 리스트 생성
val filteredMembers = members.filter(_.age < 30) // 30세 미만의 회원 필터링
println(filteredMembers) // 결과 출력
실행 결과:
List(Member(홍길동,25), Member(이영희,20))
5. 흔한 실수와 주의사항
실수 1: map과 flatMap 혼용
val numbers = List(1, 2, 3)
val result = numbers.map(n => List(n, n * 2)) // 잘못된 사용
val numbers = List(1, 2, 3)
val result = numbers.flatMap(n => List(n, n * 2)) // 올바른 사용
* map은 변환 후 결과를 리스트 안에 담아 반환하지만, flatMap은 중첩 리스트를 평탄화하여 반환합니다.
실수 2: 필터링 조건 누락
val numbers = List(1, 2, 3, 4, 5)
val evenNumbers = numbers.filter(_ % 2) // 조건 누락
val numbers = List(1, 2, 3, 4, 5)
val evenNumbers = numbers.filter(_ % 2 == 0) // 조건 추가
* 필터링 조건을 명확히 지정해야 원하는 결과를 얻을 수 있습니다.
6. 정리
map, filter, flatMap, reduce 등의 메서드를 활용하여 복잡한 데이터 처리를 간단하게 구현할 수 있습니다.다음에 학습하면 좋은 주제는 Functional Programming과 Stream API입니다. 이 주제들은 데이터 처리를 더 최적화하고, 병렬 처리 등 현대적인 프로그래밍 기법에 대한 이해를 높이는 데 도움이 될 것입니다.