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

Dart 셋 기초

Dart 셋 기초 — 초급

Dart 셋 기초

1. 도입 (왜 배워야 하는가)

셋(Set)은 데이터 구조 중 하나로, 중복된 값을 허용하지 않고 고유한 값으로만 구성됩니다. 실무에서 셋은 특히 데이터의 유일성을 보장해야 할 때 유용하게 사용됩니다. 예를 들어, 쇼핑몰에서 고객이 장바구니에 담은 상품의 중복을 막기 위해 셋을 사용할 수 있습니다. 셋을 모른다면 중복된 데이터가 발생할 수 있으며, 이는 데이터의 정확성을 해치는 결과를 초래할 수 있습니다. 따라서, 셋을 이해하고 활용하는 것은 프로그래머에게 중요한 기술입니다.

2. 핵심 개념 설명

셋(Set)의 주요 개념은 다음과 같습니다:

  • 중복 불허: 셋은 같은 값을 두 번 저장할 수 없습니다. 이는 마치 사람들이 모여 있을 때 같은 사람이 두 번 간주되지 않는 것과 같습니다.
  • 순서 없음: 셋은 저장된 값의 순서를 보장하지 않습니다. 이는 마치 주머니에 동전을 넣을 때 동전의 순서가 중요하지 않은 것과 비슷합니다.
  • 용어설명
    셋(Set)중복된 값을 허용하지 않는 데이터 구조
    요소셋에 포함된 개별 값
    집합 연산두 개 이상의 셋을 결합하거나 비교하는 연산 (합집합, 교집합 등)

    3. 기본 코드 예제

    셋의 기본 사용법을 알아보겠습니다.

    void main() {
      // 셋 생성
      Set<String> fruits = {'사과', '바나나', '오렌지'};
      
      // 셋에 요소 추가
      fruits.add('포도');
      
      // 중복된 요소 추가 시도
      fruits.add('사과');
    
      // 셋 출력
      print(fruits);
    }

    실행 결과:

    {사과, 바나나, 오렌지, 포도}
  • Set<String> fruits = {'사과', '바나나', '오렌지'};: 문자열 타입의 셋을 생성하고 초기값을 설정합니다.
  • fruits.add('포도');: '포도'라는 요소를 셋에 추가합니다.
  • fruits.add('사과');: 이미 존재하는 '사과'를 추가하려고 시도하지만, 중복이므로 무시됩니다.
  • print(fruits);: 셋의 내용을 출력합니다.
  • 4. 실전 활용 예제

    예제 1: 쇼핑몰 장바구니

    장바구니에 담긴 상품의 중복을 막기 위해 셋을 사용할 수 있습니다.

    void main() {
      Set<String> cart = {};
      
      void addToCart(String item) {
        if (cart.add(item)) {
          print('$item이 장바구니에 추가되었습니다.');
        } else {
          print('$item은 이미 장바구니에 있습니다.');
        }
      }
    
      addToCart('사과');
      addToCart('바나나');
      addToCart('사과'); // 중복 추가 시도
    }

    예제 2: 사용자 이메일 관리

    중복된 이메일을 관리하는 간단한 프로그램입니다.

    void main() {
      Set<String> emails = {};
      
      void addEmail(String email) {
        if (emails.add(email)) {
          print('$email이 추가되었습니다.');
        } else {
          print('$email은 이미 존재하는 이메일입니다.');
        }
      }
    
      addEmail('[email protected]');
      addEmail('[email protected]');
      addEmail('[email protected]'); // 중복 추가 시도
    }

    5. 흔한 실수와 주의사항

    실수 1: 셋의 중복 추가 시도

    잘못된 코드:

    fruits.add('사과'); // 중복된 요소 추가

    올바른 코드: 셋은 중복된 요소를 허용하지 않기 때문에, 추가 시도는 무시됩니다.

    실수 2: 셋의 순서 혼동

    잘못된 코드:

    print(fruits[0]); // 인덱싱 시도

    올바른 코드: 셋은 순서를 보장하지 않으므로 인덱스를 사용할 수 없습니다. 대신 for 루프를 사용해야 합니다.

    6. 정리

  • 셋은 중복된 값을 허용하지 않으며, 순서가 없는 데이터 구조입니다.
  • 실무에서는 데이터 중복을 방지하거나 유일성을 보장하는 데 유용합니다.
  • add 메서드를 사용하여 요소를 추가하고, 중복된 요소는 무시됩니다.
  • 다음에 학습하면 좋은 주제는 맵(Map)입니다. 맵은 키-값 쌍을 저장하는 데이터 구조로, 셋과 함께 자주 사용됩니다.