본문 바로가기
개발/개발 필기

효율적인 배열 비교: Set을 사용해 코드 개선하기 처음에는 조금 복잡하게 코드를 작성했지만, 개선을 통해 훨씬 깔끔하고 효율적인 코드로 만들 수 있었어요. 이 과정을 함께 살펴볼까요?

by nicksoon 2024. 11. 28.
반응형

안녕하세요! 오늘은 두 배열을 비교할 때 효율적으로 코드를 작성하는 방법에 대해 공유하려고 합니다. 처음에는 조금 복잡하게 코드를 작성했지만, 개선을 통해 훨씬 깔끔하고 효율적인 코드로 만들 수 있었어요. 이 과정을 함께 살펴볼까요?

 

초기 코드
처음 작성한 코드는 두 배열을 비교하면서 키워드의 위치를 확인하는 작업이었는데요, 아래와 같았습니다.

// 데이터를 순회하며 keywords 배열과 비교
data.forEach(item => {
    if (keywords.includes(item.keyword)) {
        // 특정 값의 인덱스 찾기
        const index = keywords.indexOf(item.keyword);
        // 이후 작업
    }
});

이 코드에서는 data 배열을 forEach로 한 번 순회하고, 각 항목마다 keywords 배열에서 값을 찾기 위해 includesindexOf를 사용했어요.

 

즉, data 배열을 순회하는 중에 keywords 배열을 매번 검색하게 되어, 반복 작업이 겹치면서 비효율적으로 보였습니다.

 

개선된 코드
위의 문제를 해결하기 위해, Set 자료 구조를 활용해 개선해 보았습니다. Set은 검색 속도가 빠르기 때문에 더 효율적으로 작업할 수 있었습니다.

// keywords 배열을 Set으로 변환
const keywordSet = new Set(keywords);

// data 배열을 순회하며 Set을 통해 키워드 존재 여부를 확인
data.forEach((item, index) => {
    if (keywordSet.has(item.keyword)) {
        console.log(`매칭된 항목 (인덱스: ${index}):`, item);
    }
});

 

개선된 코드 설명

  • Set 사용: keywords 배열을 Set으로 변환하여 키워드의 존재 여부를 빠르게 확인할 수 있도록 했습니다.
  • 효율적인 검색: keywordSet.has(item.keyword)를 사용하여 키워드의 존재 여부를 확인하므로, includesindexOf를 사용하는 것보다 더 효율적입니다.
  • 반복 횟수 감소: 이전 코드에서는 내부에서 여러 번 배열을 검색하는 작업이 있었지만, Set을 사용하면 검색이 더 간단해지고 반복 횟수가 줄어듭니다.

결과

  • 초기 코드:
    • data.forEach: 1번 반복
    • keywords.includes: 각 데이터마다 검색 (최악의 경우 keywords 전체를 탐색)
    • keywords.indexOf: 각 데이터마다 인덱스 검색
  • 개선된 코드:
    • data.forEach: 1번 반복
    • keywordSet.has: 각 데이터마다 Set에서 키워드 존재 여부를 확인

이렇게 변경한 후 코드는 더 깔끔해졌고, 반복 횟수도 줄어들어 효율성이 개선되었습니다.

 

마무리
개발을 하다 보면, 처음에는 기능적으로 동작하게 만들지만, 시간이 지나면서 점점 코드의 효율성과 가독성을 개선해야 할 필요를 느끼게 됩니다. 이번 경우에도 Set을 사용해 키워드 검색의 효율을 높일 수 있었습니다. 간단한 코드 변경으로도 성능을 크게 향상시킬 수 있으니, 여러분도 비슷한 상황에 처한다면 이런 방법을 한 번 적용해 보세요!

 

반응형