학습
Scala 기본 자료구조: 세트 (Set)
Scala 기본 자료구조: 세트 (Set) — 초급
기본 자료구조: 세트 (Set)
1. 도입 (왜 배워야 하는가)
세트(Set)는 프로그램에서 중복을 허용하지 않고, 순서가 없는 데이터 집합을 표현하는 자료구조입니다. 실무에서는 데이터의 유일성을 보장해야 할 때, 예를 들어 사용자 ID, 이메일 주소 리스트 등에서 세트를 사용합니다. 만약 세트를 사용하지 않고 배열이나 리스트를 사용한다면 중복된 데이터가 포함될 수 있어 데이터 처리에서 오류가 발생할 수 있습니다. 중복된 이메일 주소를 허용하는 시스템은 사용자 혼란을 초래하고, 데이터베이스에서 불필요한 공간을 차지하게 됩니다.
2. 핵심 개념 설명
세트(Set)의 주요 개념은 다음과 같습니다:
- 중복 제거: 세트는 동일한 값을 두 번 저장할 수 없습니다. 마치 실생활에서 'VIP 고객 리스트'처럼, 같은 고객이 두 번 적힐 수 없는 것과 같습니다.
- 순서가 없음: 세트는 요소의 순서를 보장하지 않습니다. 예를 들어, 친구 목록을 생각해보면, 친구의 이름이 일정한 순서로 나열되지 않듯이 세트도 마찬가지입니다.
| 용어 | 정의 |
|---|---|
| Set | 중복된 값을 허용하지 않고, 순서가 없는 데이터 집합입니다. |
| Mutable Set | 내용을 변경할 수 있는 세트입니다. |
| Immutable Set | 내용을 변경할 수 없는 세트입니다. |
3. 기본 코드 예제
가장 기본적인 세트를 사용해보겠습니다. 아래 코드는 세트를 생성하고, 요소를 추가하고 출력하는 예제입니다.
// immutable set 생성
val fruits = Set("사과", "바나나", "포도")
// 새로운 요소 추가 (새로운 세트 생성)
val updatedFruits = fruits + "오렌지"
// 출력
println(updatedFruits)
실행 결과:
Set(사과, 바나나, 포도, 오렌지)
val fruits = Set("사과", "바나나", "포도"): 세트를 생성하며, 초기 요소로 "사과", "바나나", "포도"를 포함합니다.val updatedFruits = fruits + "오렌지": "오렌지"를 추가한 새로운 세트를 생성합니다. 기존 세트는 변경되지 않습니다.println(updatedFruits): 업데이트된 세트를 출력합니다.4. 실전 활용 예제
- 장바구니 구현: 쇼핑몰에서 장바구니에 담길 수 있는 아이템을 세트로 관리하면, 같은 아이템이 중복으로 담기지 않도록 할 수 있습니다.
- 중복 이메일 필터링: 사용자 등록 시 이메일 주소를 세트로 관리하여 중복 등록을 방지할 수 있습니다.
- 중복 요소 추가:
- 순서가 없음을 잊는 것:
- 세트는 중복을 허용하지 않고 순서가 없는 데이터 집합입니다.
- 실생활에서 중복을 피하고자 하는 경우에 유용하게 사용됩니다.
- 세트의 특성을 이해하고 활용하면 데이터의 유일성을 보장할 수 있습니다.
var cart = Set[String]()
cart += "신발"
cart += "가방"
cart += "신발" // 중복 추가는 무시됨
println(cart) // Set(가방, 신발)
var emailList = Set[String]()
emailList += "[email protected]"
emailList += "[email protected]" // 중복 추가는 무시됨
println(emailList) // Set([email protected])
5. 흔한 실수와 주의사항
- 잘못된 코드:
val colors = Set("빨강", "파랑", "파랑") // 중복된 값 포함
- 올바른 코드:
val colors = Set("빨강", "파랑") // 중복 제거
- 잘못된 코드:
val numbers = Set(1, 2, 3)
println(numbers(0)) // 오류 발생
- 올바른 코드:
val numbers = Set(1, 2, 3)
numbers.foreach(println) // 각각의 요소를 출력
6. 정리
다음에 학습하면 좋은 주제는 맵(Map)입니다. 맵은 키-값 쌍을 저장할 수 있는 자료구조로, 데이터에 대한 빠른 접근을 가능하게 합니다.