📘 14.4.2 some
, every
- 배열의 모든 것을 검사하는 똑똑한 도우미들
안녕하세요, 여러분. 이전 시간에 find
와 findIndex
로 특정한 것을 찾는 방법을 배웠어요. 오늘은 배열 전체의 상황을 살피는 두 명의 특별한 도우미를 만나볼 거예요. 바로 some
과 every
입니다.
선생님이 우리 반 전체를 둘러보며 "숙제 안 한 학생이 있나요?"나 "모든 학생이 준비물을 다 가져왔나요?"라고 확인하시는 것처럼, 이 도우미들은 배열의 전체적인 상황을 빠르게 파악해줍니다.
🧠 새로운 단어들과 친해지기
배열의 전체 상황을 검사할 때 사용하는 중요한 단어들을 차근차근 알아볼게요.
단어 | 쉬운 설명 |
---|---|
some | 배열에서 조건을 만족하는 것이 하나라도 있는지 확인하는 도우미예요. |
every | 배열의 모든 것이 조건을 만족하는지 확인하는 도우미예요. |
참/거짓 값 | true (참) 또는 false (거짓) 값만 가지는 특별한 답변 방식이에요. |
빠른 판단 | 결과가 확실해지면 나머지 검사를 생략하는 효율적인 방법이에요. |
some
은 "일부, 몇 개"라는 뜻이고, every
는 "모든, 각각의"라는 의미예요.
✨ some
과 every
가 뭔지 알아보기
some
과 every
는 배열의 전체적인 상황을 점검해서 true
또는 false
로 답해주는 도우미들이에요. 이 둘의 가장 중요한 특징은 결과가 확실해지면 즉시 검사를 멈춘다는 거예요.
some
은 "하나라도 조건에 맞는 것이 있나요?"라는 질문에 답해주고, every
는 "모든 것이 조건에 맞나요?"라는 질문에 답해줍니다. some
은 첫 번째 true
를 만나면 바로 true
를 반환하고, every
는 첫 번째 false
를 만나면 바로 false
를 반환해요.
이런 빠르고 똑똑한 검사 방식 덕분에 큰 배열에서도 빠르게 전체 상황을 파악할 수 있습니다. 특히 정보를 확인하거나 조건을 점검이 필요한 상황에서 정말 유용해요.
재미있는 비유: 반 전체 검사하기
some
과 every
를 더 쉽게 이해하기 위해 '선생님이 우리 반을 검사하는 상황'에 비유해볼게요.
선생님이 교실에 들어와서 "숙제 안 한 학생이 있나요?"라고 물어보셨다고 생각해보세요. 이때 some
도우미는 앞자리부터 차례대로 확인하기 시작해요. 첫 번째 학생... 숙제 했음, 두 번째 학생... 숙제 했음, 세 번째 학생... 숙제 안 함! 이 순간 some
은 "네, 있어요!"라고 대답하고 검사를 끝내요.
다른 날, 선생님이 "모든 학생이 준비물을 다 가져왔나요?"라고 물어보셨어요. 이번에는 every
도우미가 나서서 차례대로 확인해요. 첫 번째 학생... 준비물 완벽, 두 번째 학생... 준비물 완벽, 세 번째 학생... 준비물 빼먹음! 이 순간 every
는 "아니요, 모두 가져오지 않았어요!"라고 대답하고 검사를 끝내요.
이처럼 some
과 every
는 전체를 다 확인하지 않아도 결과가 확실해지면 바로 답을 알려주는 똑똑한 도우미들이에요.
🎯 왜 some
과 every
를 배워야 할까요?
우리는 왜 이 검사 도우미들을 배워야 할까요?
첫 번째로, 빠른 상황 판단이 가능해져요. 큰 정보 목록에서도 조건이 확실해지면 즉시 결과를 알 수 있어서 시간을 크게 절약할 수 있습니다.
두 번째로, 정보 확인에 정말 유용해요. 사용자가 입력한 정보가 모두 올바른지, 문제가 있는 정보가 하나라도 있는지 쉽게 확인할 수 있습니다.
세 번째로, 조건부 실행을 간단하게 만들어줘요. 복잡한 if문이나 반복문 없이도 "모든 조건이 맞으면 실행", "하나라도 문제가 있으면 중단" 같은 로직을 쉽게 만들 수 있어요.
마지막으로, 코드의 의도가 명확해져요. some
을 보면 "특별한 경우를 찾고 있구나", every
를 보면 "전체를 확인하고 있구나"라고 바로 이해할 수 있습니다.
⚙️ 기본 사용법 살펴보기
some
과 every
의 기본적인 사용법을 알아보겠습니다.
// some - 하나라도 조건에 맞으면 true
let 하나라도있음 = 배열.some(function(각각의것) {
return 조건식;
});
// every - 모든 것이 조건에 맞아야 true
let 모두만족 = 배열.every(function(각각의것) {
return 조건식;
});
// 더 간단하게 쓰기
let 있음 = 배열.some(각각의것 => 조건식);
let 전부 = 배열.every(각각의것 => 조건식);
기본 예시:
let scores = [85, 90, 75, 95, 88];
// 90점 이상이 하나라도 있나요?
let hasHighScore = scores.some(function(score) {
return score >= 90;
});
// 모든 점수가 60점 이상인가요?
let allPassed = scores.every(function(score) {
return score >= 60;
});
console.log(hasHighScore); // true (90, 95가 있음)
console.log(allPassed); // true (모든 점수가 60 이상)
🧪 직접 해보면서 배우기
이제 실제 상황에서 some
과 every
를 사용하는 예시들을 살펴보겠습니다.
🔹 첫 번째 예시: 우리 반 시험 점수 검사
우리 반의 시험 점수를 가지고 다양한 검사를 해보겠습니다.
// 우리 반 수학 시험 점수
let mathScores = [85, 92, 78, 96, 88, 74];
console.log("수학 점수:", mathScores);
// 90점 이상인 학생이 있나요?
let hasExcellent = mathScores.some(function(score) {
return score >= 90;
});
console.log("90점 이상 학생이 있나요?", hasExcellent); // true
// 모든 학생이 70점 이상인가요?
let allGood = mathScores.every(function(score) {
return score >= 70;
});
console.log("모든 학생이 70점 이상인가요?", allGood); // true
// 낙제생(60점 미만)이 있나요?
let hasFailure = mathScores.some(score => score < 60);
console.log("낙제생이 있나요?", hasFailure); // false
// 모든 학생이 80점 이상인가요?
let allGreat = mathScores.every(score => score >= 80);
console.log("모든 학생이 80점 이상인가요?", allGreat); // false (74점 때문에)
이 예시에서는 다양한 조건으로 반 전체의 상황을 빠르게 파악할 수 있어요.
🔹 두 번째 예시: 친구들의 준비물 검사
소풍을 위한 친구들의 준비물 상황을 검사해보겠습니다.
// 친구들의 준비물 상황
let friends = [
{ name: "철수", hasLunch: true, hasWater: true, hasHat: false },
{ name: "영희", hasLunch: true, hasWater: true, hasHat: true },
{ name: "민수", hasLunch: false, hasWater: true, hasHat: true },
{ name: "지은", hasLunch: true, hasWater: false, hasHat: true }
];
// 도시락을 안 가져온 친구가 있나요?
let someoneNeedsLunch = friends.some(function(friend) {
return friend.hasLunch === false;
});
console.log("도시락 안 가져온 친구 있나요?", someoneNeedsLunch); // true
// 모든 친구가 물을 가져왔나요?
let everyoneHasWater = friends.every(function(friend) {
return friend.hasWater === true;
});
console.log("모든 친구가 물을 가져왔나요?", everyoneHasWater); // false
// 준비물을 완벽하게 챙긴 친구가 있나요?
let someoneReady = friends.some(friend =>
friend.hasLunch && friend.hasWater && friend.hasHat
);
console.log("완벽하게 준비한 친구 있나요?", someoneReady); // true (영희)
// 모든 친구가 완벽하게 준비했나요?
let everyoneReady = friends.every(friend =>
friend.hasLunch && friend.hasWater && friend.hasHat
);
console.log("모든 친구가 완벽하게 준비했나요?", everyoneReady); // false
이 예시에서는 복잡한 조건도 some
과 every
로 쉽게 검사할 수 있음을 보여줍니다.
🔹 세 번째 예시: 게임 레벨 클리어 확인
게임에서 여러 레벨의 클리어 상황을 확인해보겠습니다.
// 게임 레벨들의 클리어 상황
let gameLevels = [
{ level: 1, cleared: true, stars: 3 },
{ level: 2, cleared: true, stars: 2 },
{ level: 3, cleared: false, stars: 0 },
{ level: 4, cleared: true, stars: 1 },
{ level: 5, cleared: false, stars: 0 }
];
// 게임 진행 상황 검사하는 기능
function checkGameProgress(levels) {
console.log("=== 게임 진행 상황 ===");
// 클리어하지 못한 레벨이 있나요?
let hasUnclearedLevel = levels.some(function(level) {
return level.cleared === false;
});
console.log("못 깬 레벨이 있나요?", hasUnclearedLevel);
// 모든 레벨을 클리어했나요?
let allCleared = levels.every(function(level) {
return level.cleared === true;
});
console.log("모든 레벨을 클리어했나요?", allCleared);
// 별 3개를 받은 레벨이 있나요?
let hasPerfectLevel = levels.some(level => level.stars === 3);
console.log("별 3개 받은 레벨이 있나요?", hasPerfectLevel);
// 모든 클리어한 레벨이 별 2개 이상인가요?
let allClearedHaveGoodStars = levels.every(level =>
level.cleared ? level.stars >= 2 : true
);
console.log("클리어한 레벨 모두 별 2개 이상인가요?", allClearedHaveGoodStars);
}
checkGameProgress(gameLevels);
이 예시에서는 게임 진행 상황을 체계적으로 분석하는 방법을 보여줍니다.
🔄 검사 과정 정리하기
지금까지 배운 some
과 every
의 사용 과정을 단계별로 정리해보겠습니다.
첫 번째 단계는 검사 목적 정하기입니다. "하나라도 있나?"인지 "모두 그런가?"인지 명확히 결정해야 해요.
두 번째는 적절한 도우미 선택 단계입니다. 특별한 경우를 찾으려면 some
, 전체를 확인하려면 every
를 선택합니다.
세 번째는 조건 함수 작성 단계입니다. 각각이 만족해야 하는 조건을 명확히 작성해야 해요.
마지막으로 결과 활용 단계입니다. 반환된 true
나 false
를 바탕으로 적절한 조치를 취할 수 있습니다.
🧠 자주 하는 실수와 주의할 점
some
과 every
를 사용할 때 자주 하는 실수들을 알아보고 피하는 방법을 살펴보겠습니다.
❌ 실수 1: some
과 every
의 의미를 혼동하기
let scores = [85, 75, 90, 65];
// 헷갈리기 쉬운 상황
console.log("80점 이상이 있나요?");
let hasGood = scores.some(score => score >= 80);
console.log(hasGood); // true (85, 90이 있음)
console.log("모두 80점 이상인가요?");
let allGood = scores.every(score => score >= 80);
console.log(allGood); // false (75, 65가 있음)
// 명확한 기억법
console.log("--- 기억하기 ---");
console.log("some: 하나라도 조건 만족하면 → true");
console.log("every: 모두 조건 만족해야 → true");
some
은 "하나라도", every
는 "모두"라는 의미를 항상 기억해야 해요.
❌ 실수 2: 빈 배열에서의 결과를 예상하지 못하기
let emptyArray = [];
let someResult = emptyArray.some(x => x > 0);
console.log("빈 배열 some:", someResult); // false
let everyResult = emptyArray.every(x => x > 0);
console.log("빈 배열 every:", everyResult); // true (!!)
// 왜 이런 결과가 나올까요?
// some: 하나도 없으니 조건 만족하는 것도 없음 → false
// every: 모든 것이 조건 만족 (반박할 것이 없음) → true
빈 배열에서 some
은 false
, every
는 true
를 반환한다는 점을 꼭 기억해야 해요.
❌ 실수 3: 조건 함수에서 return
을 빼먹기
// 잘못된 예시 - return 없음
let numbers = [1, 2, 3, 4, 5];
let badResult = numbers.some(function(num) {
num > 3; // return이 없어요!
});
console.log(badResult); // false (항상 undefined 반환)
// 올바른 예시
let goodResult = numbers.some(function(num) {
return num > 3; // return 필수!
});
console.log(goodResult); // true
조건 함수는 반드시 true
또는 false
를 반환해야 해요.
✏️ 연습문제로 개념 다지기
배우는 것과 익히는 것 사이에는 작은 강이 하나 흐르고 있어요. 그 강을 건너는 다리가 바로 연습이죠. 우리 함께 차근차근 건너가 볼까요?
Ex1) 나이 목록에서 미성년자가 있는지 확인하고 "미성년자 발견!" 또는 "모두 성인이에요!" 메시지를 띄워보자
// 친구들의 나이 목록
let ages = [25, 17, 30, 22, 19];
// 미성년자(18세 미만)가 있는지 확인
let hasMinor = ages.some(function(age) {
return age < 18; // 각 나이가 18세 미만인지 확인
});
// 모든 사람이 성인(18세 이상)인지 확인
let allAdults = ages.every(function(age) {
return age >= 18; // 각 나이가 18세 이상인지 확인
});
console.log("나이들:", ages);
if (hasMinor) { // 미성년자가 있는지 확인
console.log("미성년자 발견!");
} else {
console.log("모두 성인이에요!");
}
console.log("검사 결과 - 미성년자 있음:", hasMinor, "모두 성인:", allAdults);
Ex2) 동물 이름에서 특별한 글자로 시작하는 동물이 있는지 확인하고 결과를 재미있게 보여주자
// 동물 이름들 목록
let animals = ["고양이", "강아지", "토끼", "말", "고릴라"];
// "고"로 시작하는 동물이 있는지 확인
let hasAnimalStartsWithGo = animals.some(function(animal) {
return animal.startsWith("고"); // 각 동물 이름이 "고"로 시작하는지 확인
});
// 모든 동물 이름이 2글자 이상인지 확인
let allLongNames = animals.every(function(animal) {
return animal.length >= 2; // 각 동물 이름이 2글자 이상인지 확인
});
console.log("동물들:", animals);
if (hasAnimalStartsWithGo) { // "고"로 시작하는 동물이 있는지 확인
console.log("'고'로 시작하는 동물을 발견했어요! 🐱");
} else {
console.log("'고'로 시작하는 동물이 없어요");
}
if (allLongNames) { // 모든 동물 이름이 2글자 이상인지 확인
console.log("모든 동물 이름이 2글자 이상이에요! 👍");
} else {
console.log("1글자 동물 이름이 있어요");
}
Ex3) 학생들의 성적을 검사해서 "반 전체 합격!" 또는 "추가 공부가 필요해요" 메시지를 보여주자
// 학생들의 성적 정보
let students = [
{ name: "철수", score: 85, submitted: true },
{ name: "영희", score: 92, submitted: true },
{ name: "민수", score: 58, submitted: false },
{ name: "지은", score: 76, submitted: true }
];
// 성적 검사하는 기능
function checkClassResults(studentList) {
console.log("=== 반 성적 검사 ===");
// 과제를 제출하지 않은 학생이 있는지 확인
let hasNotSubmitted = studentList.some(function(student) {
return student.submitted === false; // 각 학생이 제출하지 않았는지 확인
});
// 모든 학생이 60점 이상인지 확인 (제출한 학생만)
let allPassed = studentList.every(function(student) {
if (student.submitted) { // 제출한 학생인지 확인
return student.score >= 60; // 점수가 60점 이상인지 확인
}
return false; // 제출하지 않았으면 불합격 처리
});
// 결과 메시지 출력
if (hasNotSubmitted) { // 미제출 학생이 있는지 확인
console.log("⚠️ 과제 미제출 학생이 있어요!");
}
if (allPassed) { // 모든 학생이 합격했는지 확인
console.log("🎉 반 전체 합격!");
} else {
console.log("📚 추가 공부가 필요해요");
}
return { hasNotSubmitted, allPassed }; // 결과 정보 묶음 반환
}
checkClassResults(students);
📚 13단원 복습 - 비동기 처리 되돌아보기
14단원을 배우기 전에 13단원에서 배운 비동기 처리를 복습해볼까요?
복습 문제 1: setTimeout으로 시간 지연 만들기
// 3초 후에 "안녕하세요!"라는 메시지를 출력하는 코드를 작성해보세요.
console.log("시작!");
setTimeout(function() {
console.log("안녕하세요!");
}, 3000); // 3초 = 3000밀리초
console.log("끝!");
// 출력 순서: "시작!" → "끝!" → (3초 후) "안녕하세요!"
설명: setTimeout은 정해진 시간이 지난 후에 함수를 실행시켜주는 기능이에요. 시간을 기다리는 동안 다른 코드들이 먼저 실행됩니다.
복습 문제 2: Promise로 약속 만들기
// 성공하는 약속과 실패하는 약속을 만들어보세요.
let 성공약속 = new Promise(function(resolve, reject) {
setTimeout(function() {
resolve("약속을 지켰어요!");
}, 1000);
});
let 실패약속 = new Promise(function(resolve, reject) {
setTimeout(function() {
reject("약속을 못 지켰어요...");
}, 1000);
});
// 약속 결과 확인하기
성공약속.then(function(result) {
console.log("성공:", result);
});
실패약속.catch(function(error) {
console.log("실패:", error);
});
설명: Promise는 "지금은 결과가 없지만 나중에 알려줄게"라는 약속을 나타내는 방법이에요. 성공하면 then으로, 실패하면 catch로 처리합니다.
🤔 심화 문제로 실력 확인하기
더 깊이 있는 문제들을 통해 some
과 every
에 대한 이해를 확인해보겠습니다.
Q1. some
과 every
를 친구에게 설명한다면 어떻게 설명하겠나요?
정답: "some
과 every
는 반 전체 검사와 같아요. some
은 '한 명이라도 숙제 안 한 사람 있어?'처럼 하나라도 해당하면 '있어요!'라고 답하는 거고, every
는 '모든 사람이 숙제 다 했어?'처럼 모든 사람이 다 해야만 '네!'라고 답할 수 있는 거예요."
Q2. 다음 코드의 결과를 예측해보세요.
let arr = [];
console.log(arr.some(x => x > 0));
console.log(arr.every(x => x > 0));
정답: 첫 번째는 false
, 두 번째는 true
가 출력됩니다. 빈 배열에서 some
은 "하나도 없으니 조건 만족하는 것도 없다"라서 false
이고, every
는 "모든 것이 조건을 만족한다(반박할 것이 없다)"라서 true
입니다.
🧚♀️ 이야기로 다시 배우기: 학교의 시험 감독관 대모험
마지막으로 some
과 every
를 하나의 이야기로 정리해볼게요.
우리 학교에 썸(Some) 선생님과 에브리(Every) 선생님이라는 두 명의 시험 감독관이 있었어요. 이 두 선생님은 정말 특별한 능력을 가지고 있었답니다.
어느 날, 시험이 끝나고 교장선생님이 물어보셨어요. "혹시 연필을 깜빡한 학생이 있나요?"
썸 선생님은 번개처럼 빠르게 교실을 확인하기 시작했어요. 첫 번째 학생... 연필 있음, 두 번째 학생... 연필 있음, 세 번째 학생... 연필 없음! "네, 한 명 있어요!"라고 즉시 대답했죠. 나머지 학생들은 확인하지도 않았어요. 이미 답을 찾았으니까요.
다른 날, 교장선생님이 "모든 학생이 시험을 통과했나요?"라고 물어보셨어요.
에브리 선생님이 나서서 차근차근 확인하기 시작했어요. 첫 번째 학생... 통과, 두 번째 학생... 통과, 세 번째 학생... 불합격! "아니요, 모두 통과하지 못했어요!"라고 바로 대답했습니다. 이 경우에도 나머지는 확인할 필요가 없었죠.
어떤 날은 빈 교실을 확인해야 했어요. 썸 선생님에게 "문제가 있는 학생이 있나요?"라고 물으면 "아무도 없으니 문제도 없어요(false
)"라고 답했고, 에브리 선생님에게 "모든 학생이 완벽한가요?"라고 물으면 "반박할 학생이 없으니 완벽해요(true
)"라고 답했어요.
이처럼 some
과 every
는 빠르고 정확하고 똑똑한 검사를 통해 우리가 배열의 상황을 빠르게 파악할 수 있도록 도와주는 훌륭한 도구들이에요. 여러분도 이제 이 기능을 배웠으니, 어떤 정보 목록이든 빠르고 정확하게 검사할 수 있게 되었답니다!
✅ 학습 완료 체크리스트
이번 시간에 배운 내용들을 모두 이해했는지 확인해보세요!
학습 내용 | 이해했나요? |
---|---|
some과 every의 기본 개념 | ✅ |
기본 사용법과 문법 | ✅ |
주요 특징과 차이점 | ✅ |
자주 하는 실수들 | ✅ |
실전 예제 이해 | ✅ |
13단원 복습 완료 | ✅ |
📂 마무리 정보
오늘 배운 14.4.2
내용이 여러분의 자바스크립트 지식에 잘 저장되었나요? 다음 시간에는 더 재미있는 내용으로 만나요!
기억할 점: 오늘 배운 내용을 꼭 연습해보시고, 궁금한 점이 있으면 언제든 다시 돌아와서 읽어보세요.
무료 JavaScript 학습 플랫폼에서 단계별 학습과 실시간 코드 실행을 통해
더욱 효과적이고 재미있게 학습하실 수 있습니다.
'14. 고급 배열 마법사 (고급 배열 메서드) > 14.4 배열 검색과 정렬' 카테고리의 다른 글
14.4.3 `sort` - 배열을 정리정돈해주는 똑똑한 정리 도우미 (0) | 2025.07.21 |
---|---|
14.4.1 `find`, `findIndex` - 배열에서 원하는 친구를 찾아주는 똑똑한 도우미들 (0) | 2025.07.21 |