행복한 가족, 패밀리그램

개발

JavaScript 배열 섞기: 핵심 정리

패밀리그램 2024. 9. 24. 00:28

 

JavaScript 배열 섞기: 핵심 정리

JavaScript에서 배열의 요소 순서를 무작위로 섞는 것은 다양한 상황에서 유용하게 활용될 수 있습니다. 퀴즈 앱, 카드 게임, 랜덤 이미지 슬라이드 등 예측 불가능성을 더하고 싶을 때 배열 섞기는 필수적인 기능입니다. 이번 포스팅에서는 JavaScript에서 배열을 섞는 다양한 방법과 각 방법의 장단점, 그리고 상황에 맞는 적절한 선택 방법을 알아보겠습니다.

1. Fisher-Yates 알고리즘

가장 널리 사용되고 효율적인 방법입니다. 원본 배열을 직접 수정하며 섞습니다.

function shuffle(array) {
  for (let i = array.length - 1; i > 0; i--) {
    const j = Math.floor(Math.random() * (i + 1));
    [array[i], array[j]] = [array[j], array[i]]; 
  }
}

장점:

  • 효율성: 시간 복잡도 O(n)으로 빠르게 동작합니다.
  • 랜덤성 보장: 모든 요소가 균등한 확률로 섞입니다.

단점:

  • 원본 배열 수정: 원본 배열을 직접 수정하므로 주의가 필요합니다.

2. sort() 메서드 활용

sort() 메서드에 랜덤한 비교 함수를 전달하여 섞습니다.

function shuffle(array) {
  return array.sort(() => Math.random() - 0.5);
}

장점:

  • 간결성: 코드가 매우 간단합니다.

단점:

  • 랜덤성: 완벽하게 랜덤하지 않을 수 있습니다. 특히 배열 크기가 클 경우 편향될 가능성이 있습니다.
  • 새로운 배열 생성: 원본 배열을 유지하고 싶다면 복사본을 만들어 사용해야 합니다.

3. 외부 라이브러리 활용 (lodash)

외부 라이브러리를 사용하는 경우 lodash의 _.shuffle() 함수를 활용할 수 있습니다.

import _ from 'lodash';

const shuffledArray = _.shuffle(originalArray); 

장점:

  • 편리성: 검증된 라이브러리 함수를 사용하여 안정적으로 섞을 수 있습니다.

단점:

  • 외부 의존성: 외부 라이브러리를 추가해야 합니다.

결론

JavaScript에서 배열을 섞는 방법은 다양하며, 각 방법은 장단점이 있습니다. 일반적으로 Fisher-Yates 알고리즘을 사용하는 것이 가장 효율적이고 안정적입니다. 하지만 상황에 따라 다른 방법을 선택할 수도 있습니다. 예를 들어, 간단한 섞기가 필요하고 랜덤성이 중요하지 않다면 sort() 메서드를 사용할 수 있습니다. 외부 라이브러리를 이미 사용 중이라면 lodash의 _.shuffle() 함수를 활용하는 것도 좋은 선택입니다.

핵심: 배열 섞기는 JavaScript 프로그래밍에서 자주 사용되는 유용한 기술입니다. 다양한 방법을 이해하고 상황에 맞는 최적의 방법을 선택하여 코드의 효율성과 안정성을 높이세요!