Set을 사용해야 하는 상황 이해하기
JavaScript에서 Set을 활용해 코드를 더 빠르게 만들려면, 먼저 배열(Array) 대신 Set을 사용해야 하는 상황을 정확히 이해해야 합니다.
1. 중복 데이터 방지
Set은 고유한(unique) 요소만 저장합니다. 따라서 자료구조에 중복된 데이터가 저장되지 않아야 한다는 것을 미리 알고 있다면, 배열보다 Set을 사용하는 것이 훨씬 간편하고 효율적입니다.
2. 집합 연산의 효율성
합집합(union), 교집합(intersect), 차집합(difference) 같은 기본적인 집합 연산은 Set이 기본으로 제공하는 내장 메서드를 기반으로 쉽고 효과적으로 구현할 수 있습니다. 특히 delete() 메서드 덕분에 두 개의 Set 사이에서 교집합이나 합집합을 수행하는 것이, 두 개의 배열로 동일한 작업을 처리하는 것보다 훨씬 편리합니다.
또한 Set에서 임의의 요소를 삭제하는 작업은 O(1)의 시간 복잡도를 가지지만, 배열에서 같은 작업은 O(n)이 걸립니다. 이러한 차이가 코드 실행 속도를 크게 좌우합니다.
3. 용도에 맞는 자료구조 선택
배열은 순서가 있는 요소에 대한 인덱스 기반 접근이나, 인덱스를 통한 직접 접근이 필요한 작업(예: 이진 탐색, Binary Search)에 적합합니다. 반면 Set은 컬렉션 안에 특정 객체가 존재하는지 확인하고 검증하는 멤버십(membership) 체크에 최적화되어 있습니다.
Set을 사용하면 좋은 경우
검색이 많은(search-heavy) 시나리오에서는 Set을 사용하는 것이 좋습니다. 예를 들어, 권한 부여(authorization)와 인증(authentication) 과정에서 서로 다른 그룹에 사용자가 속해 있는지 멤버십을 확인해야 하는 경우가 대표적입니다.
배열을 사용해야 하는 경우
반대로 순서가 중요하고 중복 데이터가 필요한 곳에서는 배열을 사용해야 합니다. 예를 들어, 객체들을 정렬된 형태로 유지해야 하는 컬렉션이 이에 해당합니다.
참고: Set은 배열과 다른 자료구조입니다. Set은 배열을 대체하기 위한 것이 아니라, 추가적인 지원을 제공하기 위해 설계되었습니다. 따라서 상황에 맞게 두 자료구조를 적절히 선택하는 것이 무엇보다 중요합니다.