본문 바로가기
javascript/javascript

자바스크립트 some() 함수의 개념과 사용 방법

by 산코디 2024. 4. 26.

자바스크립트를 개발하다 보면 for문을 사용하여 로직 처리해야 하는 경우기 정말 많다. 기본 for문을 제외하고 정말 다양한 종류의 반복문 처리하는 기능이 있는데, 오늘은 그중에서 some() 함수에 대해서 정리해보려고 한다.
배열 객체를 기준으로 루프를 돌며 반복 처리한다는 개념은 같지만 내부적으로 처리되는 방식이 조금 다르다는 점이 있다.
some() 함수는 어떤 차이가 있는지 개념과 특징, 사용법 등을 알아보자.




some() 함수의 개념과 특징

some() 함수는 배열의 각 요소에 대해 제공된 함수를 호출하고, 그 함수가 적어도 하나에 대해 true를 반환할 때 반복문을 종료하고 최종 결괏값을 true로 반환하게 된다. 그렇지 않으면 마지막 요소까지 확인하면서 true가 없다면 false를 반환한다.


조건 충족 여부 반환
some() 함수는 배열의 요소를 순회하면서 제공된 함수를 호출하고, 그 함수가 true를 반환하는 첫 번째 요소를 찾으면 즉시 true를 반환하고 순회를 종료하게 된다.

배열 변경 없음
some() 함수는 배열을 변경하지 않고 각 요소에 대해 주어진 함수를 실행하여 조건을 충족하는지 확인한다.

순회 종료
조건을 충족하는 요소를 찾으면 더 이상 순회하지 않고 종료한다. 이로 인해 성능을 향상시킬 수 있다.

조건 함수
some() 함수에 전달되는 함수는 보통 조건을 나타내는데, 이 함수는 각 요소에 대해 호출되며 true나 false를 반환한다.


위와 같은 특징을 통해 배열에서 어떤 요소가 특정 조건을 충족하는지 확인하고 싶을 때 some() 함수를 활용할 수 있다.


다양한 예제를 통해서 알아보자.


숫자 배열의 양수 확인

const numbers = [-1, 0, 2, -3, 4, -5];

// 배열에 양수가 있는지 확인하는 함수
const hasPositiveNumber = numbers.some(function(number) {
  return number > 0;
});

if (hasPositiveNumber) {
  console.log("배열에 양수가 있습니다.");
} else {
  console.log("배열에 양수가 없습니다.");
}

위의 코드는 숫자 배열 함수의 요소 중 양수가 있는지 확인하는 예제 코드다.
some() 함수를 사용하여 순회하면서 각 요소가 양수인지 확인하고 양수가 맞으면 true를 반환하고 그 즉시 순회를 종료한다.
some() 함수를 통해서 중간에 양수가 있다면 마지막 요소까지 순회하지 않더라도 종료가 되기 때문에 성능이 좋다고 볼 수 있다.

간혹 개발을 하다 보면 배열에서 양수값을 찾아야 하는 경우가 있으니, 그런 상황에 some() 함수를 활용하면 좋을 것 같다.



도시 목록에서 특정 도시 확인

// 도시 목록
const cities = ["Seoul", "Tokyo", "New York", "Paris"];

// 찾고자하는 도시
const targetCity = "Tokyo";

// 배열에 사용자가 찾고자 하는 도시가 있는지 확인
const hasTargetCity = cities.some(function(city) {
  return city === targetCity;
});

if (hasTargetCity) {
  console.log("배열에 찾고자 하는 도시가 있습니다.");
} else {
  console.log("배열에 찾고자 하는 도시가 없습니다.");
}

위의 코드는 도시 목록에서 원하는 특정 도시가 있는지 확인하는 예제 코드다.
위의 예제와 유사하며, some() 함수를 사용해서 배열 내에서 내가 원하는 도시가 있는지 찾고, 원하는 도시가 있다면 true로 반환하고 그 즉시 순회를 종료하게 된다.
동작 방식은 동일하며, 어떤 조건으로 순회를 종료하는지만 다르다.

위의 예제를 활용하여 특정 배열 안의 요소를 찾는 유사한 상황을 for문 대신 활용하여 최대한 순회하는 수를 줄일 수 있다.



학생 목록에서 특정 나이 확인

const students = [
  { name: "Alice", age: 20 },
  { name: "Bob", age: 22 },
  { name: "Charlie", age: 21 },
  { name: "David", age: 19 }
];

// 사용자가 지정한 나이 이상인 학생이 있는지 확인
const targetAge = 21;
const hasStudentOverAge = students.some(function(student) {
  return student.age >= targetAge;
});

if (hasStudentOverAge) {
  console.log(`학생 중 ${targetAge}세 이상인 학생이 있습니다.`);
} else {
  console.log(`학생 중 ${targetAge}세 이상인 학생이 없습니다.`);
}

위의 코드는 학생 목록에서 특정 나이의 학생이 있는지 확인하는 예제 코드다. 위의 다른 예제들과는 조금 다르게 배열 내의 Object인 경우 확인하는 방법이다.
학생 목록 students를 기준으로 some() 함수를 사용해 순회할 때, 특정 나이 21에 속한 학생을 찾는 코드다.
위의 예제에서는 4명의 학생 데이터로 구성하였지만, 실제 학생 목록 데이터는 훨씬 많은 경우가 많기 때문에 유사한 경우의 데이터로 순회 처리를 하게 된다면 성능이 떨어질 수 있다.
특정 학생만 찾고 종료하는 것이 성능상 유리하기 때문에 이러한 경우에도 some() 함수를 활용하는 것이 좋다.



자바스크립트에서 some() 함수는 매우 유용한 함수다. 위의 정리한 예제들과 같이 다양하게 활용되며, 성능까지 기존의 for문보다 좋다. 그러나, 어떤 함수든 기능이든 정확히 알고 사용해야 하며, some() 함수 역시 주의사항을 고려하여 사용하는 것이 중요하다.


순서 유의
some() 함수는 배열의 요소를 순서대로 확인하므로, 조건을 충족하는 요소가 배열의 어느 위치에 있는지에 따라 동작이 달라질 수 있다.

빈 배열
빈 배열에 some() 함수를 사용한다면 false를 반환하게 된다. 그렇기 때문에 빈 배열을 처리할 때에는 요소가 없는데 무조건 false로 반환해도 되는지 고려하고 사용하는 것이 좋다.

콜백 함수
some() 함수에 전달되는 콜백 함수는 각 요소에 대해 실행되므로, 콜백 함수의 성능과 복잡성에 주의하는 것이 좋다. 비효율적인 콜백 함수는 성능 저하를 가져올 수 있다.

순회 중단
some() 함수는 조건을 만족하는 경우 즉시 순회를 중단하므로, 배열의 크기가 매우 큰 경우에는 효율적으로 작동할 수 있다. 그러나 반드시 모든 배열의 요소를 확인해야 하는 경우에는 forEach()나 every() 함수를 사용하는 것이 좋다.

다중 조건
some() 함수는 하나의 조건만 검사할 수 있으므로, 여러 개의 조건을 검사해야 하는 경우에는 방법을 고려해야 한다.
배열 메서드 체이닝이나 다른 순회 함수를 사용하는 것이 좋다.




마무리

오늘은 자바스크립트의 순회 함수인 some() 함수에 대해서 정리해 봤다. 예전에는 for문만 가지고 대부분의 로직을 처리했지만 많은 기술의 발전으로 조금 더 편하게 개발을 할 수 있어서 좋은 것 같다. 그만큼 계속 공부를 해야 하지만 기초부터 잘 다져왔다면 이와 같은 기능들은 손쉽게 익힐 수 있을 것이다.

반응형