확인한 환경과 범위

Windows · Node.js v24.18.0. 본문의 첫 예제를 실행하여 표준 출력과 예상 결과가 일치함을 확인했습니다. 연습문제의 모든 입력을 검증한 것은 아닙니다.

이 글의 순서 5개 단락

자료와 작업 나누기

마지막 예제에서는 학생마다 이름과 점수 배열을 하나의 객체로 묶고, 그 객체들을 다시 배열에 담습니다. 학생 수와 각 학생의 점수 개수가 서로 달라도 같은 방식으로 처리할 수 있습니다. 계산을 담당하는 함수와 결과를 출력하는 반복문을 나누어 작성하면 각 부분의 역할을 따라가기 쉽습니다.

평균은 점수의 합계를 점수 개수로 나눈 값입니다. 다만 점수 배열이 비어 있다면 개수가 0이므로 평균을 계산하지 않습니다. 예제에서는 값이 없음을 나타내기 위해 null을 반환합니다. null은 숫자 0과 다른 특별한 값입니다. 0점인 학생과 점수가 없는 학생을 구분하는 데 사용할 수 있습니다.

실행 예제와 결과

const students = [
  { name: "민지", scores: [90, 80, 100] },
  { name: "지우", scores: [70, 80, 75] },
  { name: "하늘", scores: [] }
];

function average(scores) {
  if (scores.length === 0) return null;
  let total = 0;
  for (let index = 0; index < scores.length; index = index + 1) {
    total = total + scores[index];
  }
  return total / scores.length;
}

function grade(score) {
  if (score >= 90) return "A";
  if (score >= 80) return "B";
  if (score >= 70) return "C";
  return "D";
}

for (let index = 0; index < students.length; index = index + 1) {
  const student = students[index];
  const result = average(student.scores);
  if (result === null) {
    console.log(`${student.name}: 점수 없음`);
  } else {
    console.log(`${student.name}: 평균 ${result}, 등급 ${grade(result)}`);
  }
}

민지의 합계는 270이고 세 점수의 평균은 90이므로 A입니다. 지우의 합계는 225이고 평균은 75이므로 C입니다. 하늘의 점수 배열은 비어 있어 average가 null을 반환하고, 출력 반복문은 등급 함수 대신 점수 없음을 출력합니다. grade의 각 조건은 참일 때 즉시 반환하므로 높은 기준부터 검사합니다.

학생별 평균과 등급 요약기 — 첫 예제의 실제 실행 결과

빈 배열과 계산 기준

if (scores.length === 0) return null;은 조건이 참일 때 한 문장만 실행하는 짧은 표기입니다. 중괄호를 써서 if (scores.length === 0) { return null; }로 표현해도 동작은 같습니다. 빈 배열을 먼저 처리하므로 이후의 나눗셈은 점수가 적어도 하나 있을 때만 수행됩니다.

이 예제는 모든 점수가 유효한 숫자라고 가정합니다. 점수에 문자열이나 잘못된 값이 섞일 수 있는 실제 입력이라면 계산 전에 별도 검사가 필요합니다. 또한 평균이 소수인 경우 반올림하지 않은 값을 출력하며 그 원래 값으로 등급을 정합니다. 예를 들어 평균 89.5는 90 이상이 아니므로 B입니다. 표시용 반올림과 등급 계산의 기준은 요구사항에 맞춰 따로 정해야 합니다.

한 학생의 데이터가 지나가는 경로

작은 프로젝트를 읽을 때는 전체 코드를 한 번에 이해하려 하기보다 학생 한 명을 골라 흐름을 따라가보세요. 민지의 객체를 읽고, 점수 배열을 average에 전달하고, 평균을 grade에 전달하고, 마지막에 이름과 두 결과를 출력하는 순서입니다. 이 과정이 끝나면 반복문이 다음 학생으로 이동합니다.

학생합계와 개수평균 함수의 결과출력 경로
민지270 / 390평균과 A 등급
지우225 / 375평균과 C 등급
하늘점수 0개null점수 없음

함수와 반복문을 분리했기 때문에 등급 기준을 바꾸려면 grade의 조건을, 평균 계산을 바꾸려면 average를 살펴보면 됩니다. 학생을 추가하는 작업은 자료 배열에서 처리합니다. 자료·계산·출력의 역할을 나누면 변경할 위치가 선명해집니다.

이 예제의 null은 평균이 0이라는 의미가 아니라 계산할 점수가 없다는 약속입니다. 호출하는 쪽도 같은 약속을 알아야 하므로 result === null로 정확히 비교합니다. 만약 if (!result)처럼 단순히 거짓처럼 취급되는지만 검사하면 숫자 0을 점수 없음으로 오해할 수 있습니다. 아직 배우지 않은 짧은 표현으로 줄이기보다 먼저 어떤 값을 구별해야 하는지 적어보세요. 기능을 확장할 때는 점수의 유효성, 소수 표시, 동점 처리처럼 이번 예제가 정하지 않은 기준부터 명확히 정하는 것이 좋습니다.

연습문제와 해설

새 학생으로 이름 "서준", 점수 [60, 80]을 추가했을 때 결과를 예상해 보세요. 합계는 140이고 개수는 2이므로 평균은 70입니다. 70은 C 기준에 포함되므로 서준: 평균 70, 등급 C가 출력됩니다. 학생 객체를 배열에 추가하기만 하면 기존 반복문과 함수를 그대로 사용할 수 있습니다.

점수가 [0]인 학생과 []인 학생도 비교해 보세요. [0]은 길이가 1이므로 평균 0과 D 등급을 얻습니다. []는 길이가 0이므로 null을 반환하고 점수 없음으로 표시됩니다. result === null이라는 엄격한 비교가 숫자 0을 빈 결과로 오해하지 않도록 해 줍니다.

CHECK THE SOURCE

참고한 공식 문서

기능 설명은 위 문서를 참고했으며, 예제의 입력·결과와 한계는 본문에 따로 기록했습니다.

한 줄씩 이해하고, 차곡차곡 기록합니다.이 글의 오류 제보하기 ↗