IMCAT.DEV
로그인 가입
Scala 입문 자료구조

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. 실전 활용 예제

    1. 장바구니 구현: 쇼핑몰에서 장바구니에 담길 수 있는 아이템을 세트로 관리하면, 같은 아이템이 중복으로 담기지 않도록 할 수 있습니다.
    2.    var cart = Set[String]()
         cart += "신발"
         cart += "가방"
         cart += "신발" // 중복 추가는 무시됨
         println(cart) // Set(가방, 신발)
    3. 중복 이메일 필터링: 사용자 등록 시 이메일 주소를 세트로 관리하여 중복 등록을 방지할 수 있습니다.
    4.    var emailList = Set[String]()
         emailList += "[email protected]"
         emailList += "[email protected]" // 중복 추가는 무시됨
         println(emailList) // Set([email protected])

      5. 흔한 실수와 주의사항

    5. 중복 요소 추가:
    6. - 잘못된 코드:

           val colors = Set("빨강", "파랑", "파랑") // 중복된 값 포함

      - 올바른 코드:

           val colors = Set("빨강", "파랑") // 중복 제거
    7. 순서가 없음을 잊는 것:
    8. - 잘못된 코드:

           val numbers = Set(1, 2, 3)
           println(numbers(0)) // 오류 발생

      - 올바른 코드:

           val numbers = Set(1, 2, 3)
           numbers.foreach(println) // 각각의 요소를 출력

      6. 정리

    9. 세트는 중복을 허용하지 않고 순서가 없는 데이터 집합입니다.
    10. 실생활에서 중복을 피하고자 하는 경우에 유용하게 사용됩니다.
    11. 세트의 특성을 이해하고 활용하면 데이터의 유일성을 보장할 수 있습니다.

다음에 학습하면 좋은 주제는 맵(Map)입니다. 맵은 키-값 쌍을 저장할 수 있는 자료구조로, 데이터에 대한 빠른 접근을 가능하게 합니다.