본문 바로가기
AppSheet

구글 앱스크립트 3차시 - 조건문과 반복문

by 에버리치60 2025. 12. 20.

구글 앱스크립트 3차시 - 조건문과 반복문

3차시: 조건문과 반복문 마스터하기

프로그램의 흐름을 제어하는 핵심 기능 익히기

📚 학습 목표
  • if, else if, else를 활용한 조건문 작성하기
  • for, while 반복문으로 반복 작업 자동화하기
  • 중첩 반복문과 조건문 활용하기
  • 실전 예제: 출석부와 성적 분석 프로그램 만들기

📖 조건문(if문) 이해하기

1 조건문의 기본 구조
조건문은 특정 조건이 참(true)일 때만 코드를 실행합니다.
기본 문법:
if (조건): 조건이 참이면 실행
else if (조건): 이전 조건이 거짓이고 이 조건이 참이면 실행
else: 모든 조건이 거짓일 때 실행

🚀 실습 1: 조건문 활용하기

2 날씨에 따른 메시지 출력
조건문을 사용하여 다양한 경우를 처리해봅시다:
function 날씨알림() {
  let 기온 = 25;
  let 강수확률 = 70;
  let 메시지 = "";
  
  // 온도에 따른 판단
  if (기온 >= 30) {
    메시지 = "매우 더워요! 시원한 곳에서 지내세요.";
  } else if (기온 >= 20) {
    메시지 = "쾌적한 날씨입니다.";
  } else if (기온 >= 10) {
    메시지 = "조금 쌀쌀해요. 겉옷을 챙기세요.";
  } else {
    메시지 = "추운 날씨입니다. 따뜻하게 입으세요.";
  }
  
  // 비 확률 추가
  if (강수확률 >= 70) {
    메시지 += " 우산을 꼭 챙기세요!";
  } else if (강수확률 >= 30) {
    메시지 += " 우산을 준비하는게 좋겠어요.";
  }
  
  Logger.log("오늘의 날씨: " + 메시지);
  SpreadsheetApp.getActiveSpreadsheet().toast(메시지, "날씨 알림", 5);
}
실행해보고, 기온과 강수확률 값을 바꿔가며 테스트해보세요.
3 논리 연산자 활용하기
여러 조건을 조합할 수 있습니다 (&& = 그리고, || = 또는, ! = 부정):
function 할인적용() {
  let 나이 = 15;
  let 회원등급 = "VIP";
  let 구매금액 = 50000;
  let 할인율 = 0;
  
  // 복합 조건
  if (나이 < 19 || 나이 >= 65) {
    할인율 = 10;
    Logger.log("연령 할인 10% 적용");
  }
  
  if (회원등급 === "VIP" && 구매금액 >= 30000) {
    할인율 += 15;
    Logger.log("VIP 추가 할인 15% 적용");
  } else if (회원등급 === "GOLD" && 구매금액 >= 50000) {
    할인율 += 10;
    Logger.log("GOLD 추가 할인 10% 적용");
  }
  
  let 할인금액 = 구매금액 * (할인율 / 100);
  let 최종금액 = 구매금액 - 할인금액;
  
  Logger.log("구매금액: " + 구매금액 + "원");
  Logger.log("총 할인율: " + 할인율 + "%");
  Logger.log("할인금액: " + 할인금액 + "원");
  Logger.log("최종금액: " + 최종금액 + "원");
}
실행하고 로그를 확인하세요.

🔄 반복문(for, while) 이해하기

4 for 반복문 기본
for문은 정해진 횟수만큼 반복할 때 사용합니다:
function for문연습() {
  let sheet = SpreadsheetApp.getActiveSheet();
  
  // 1부터 10까지 숫자 출력
  Logger.log("=== 1부터 10까지 ===");
  for (let i = 1; i <= 10; i++) {
    Logger.log(i);
  }
  
  // 구구단 5단
  Logger.log("=== 구구단 5단 ===");
  for (let i = 1; i <= 9; i++) {
    let 결과 = 5 * i;
    Logger.log("5 x " + i + " = " + 결과);
  }
  
  // 스프레드시트에 구구단 작성
  sheet.getRange("A1").setValue("구구단 5단");
  for (let i = 1; i <= 9; i++) {
    let 행 = i + 1;
    sheet.getRange(행, 1).setValue("5 x " + i + " = " + (5 * i));
  }
}
실행 후 로그와 스프레드시트를 확인하세요.
5 중첩 반복문 활용하기
반복문 안에 또 다른 반복문을 넣을 수 있습니다:
function 구구단전체() {
  let sheet = SpreadsheetApp.getActiveSheet();
  sheet.clear(); // 시트 내용 지우기
  
  // 제목 작성
  for (let dan = 2; dan <= 9; dan++) {
    let 열 = dan - 1;
    sheet.getRange(1, 열).setValue(dan + "단");
  }
  
  // 구구단 작성 (2단부터 9단까지)
  for (let dan = 2; dan <= 9; dan++) {
    let 열 = dan - 1; // 2단은 1열, 3단은 2열...
    
    for (let i = 1; i <= 9; i++) {
      let 행 = i + 1;
      let 결과 = dan * i;
      sheet.getRange(행, 열).setValue(dan + "x" + i + "=" + 결과);
    }
  }
  
  SpreadsheetApp.getActiveSpreadsheet().toast("구구단 작성 완료!", "완료", 3);
}
실행하면 2단부터 9단까지 모든 구구단이 표시됩니다!
6 while 반복문
while문은 조건이 참인 동안 계속 반복합니다:
function while문연습() {
  // 1부터 100까지 합계
  let 합계 = 0;
  let i = 1;
  
  while (i <= 100) {
    합계 += i;
    i++;
  }
  Logger.log("1부터 100까지의 합: " + 합계);
  
  // 특정 값을 찾을 때까지 반복
  let 숫자 = 1;
  while (숫자 * 숫자 < 1000) {
    Logger.log(숫자 + "의 제곱: " + (숫자 * 숫자));
    숫자++;
  }
  Logger.log("제곱이 1000을 넘는 첫 번째 숫자: " + 숫자);
}
실행하고 결과를 확인하세요.

🎯 실습 2: 출석부 관리 프로그램

7 출석 데이터 입력하기
학생들의 출석 정보를 관리하는 프로그램을 만들어봅시다:
function 출석부작성() {
  let sheet = SpreadsheetApp.getActiveSheet();
  sheet.clear();
  
  // 제목 행
  let 제목 = ["번호", "이름", "월", "화", "수", "목", "금", "출석일", "결석일", "출석률"];
  for (let i = 0; i < 제목.length; i++) {
    sheet.getRange(1, i + 1).setValue(제목[i]);
  }
  
  // 학생 데이터 (O: 출석, X: 결석)
  let 학생들 = [
    [1, "김민수", "O", "O", "O", "X", "O"],
    [2, "이지은", "O", "O", "O", "O", "O"],
    [3, "박준호", "O", "X", "O", "O", "X"],
    [4, "최유진", "X", "O", "O", "O", "O"],
    [5, "정하늘", "O", "O", "X", "O", "O"]
  ];
  
  // 데이터 입력 및 출석 통계 계산
  for (let i = 0; i < 학생들.length; i++) {
    let 행 = i + 2;
    let 학생 = 학생들[i];
    let 출석일수 = 0;
    let 결석일수 = 0;
    
    // 기본 정보 입력
    sheet.getRange(행, 1).setValue(학생[0]); // 번호
    sheet.getRange(행, 2).setValue(학생[1]); // 이름
    
    // 요일별 출석 입력 및 카운트
    for (let j = 2; j <= 6; j++) {
      let 출석여부 = 학생[j];
      sheet.getRange(행, j + 1).setValue(출석여부);
      
      if (출석여부 === "O") {
        출석일수++;
      } else {
        결석일수++;
      }
    }
    
    // 통계 입력
    sheet.getRange(행, 8).setValue(출석일수);
    sheet.getRange(행, 9).setValue(결석일수);
    
    // 출석률 계산 (출석일 / 전체일 * 100)
    let 출석률 = (출석일수 / 5) * 100;
    sheet.getRange(행, 10).setValue(출석률 + "%");
  }
  
  SpreadsheetApp.getActiveSpreadsheet().toast("출석부 작성 완료!", "완료", 3);
}
실행 후 출석부가 완성되었는지 확인하세요.
8 출석률 분석 및 경고
출석률이 낮은 학생을 찾아 경고 메시지를 표시합니다:
function 출석률분석() {
  let sheet = SpreadsheetApp.getActiveSheet();
  let 경고학생 = [];
  let 우수학생 = [];
  
  // 2행부터 6행까지 검사 (학생 5명)
  for (let row = 2; row <= 6; row++) {
    let 이름 = sheet.getRange(row, 2).getValue();
    let 출석률문자열 = sheet.getRange(row, 10).getValue();
    let 출석률 = parseFloat(출석률문자열); // "80%" → 80
    
    // 조건에 따라 분류
    if (출석률 < 70) {
      경고학생.push(이름 + "(" + 출석률 + "%)");
      // 셀에 배경색 추가 (빨간색)
      sheet.getRange(row, 10).setBackground("#ffcdd2");
    } else if (출석률 === 100) {
      우수학생.push(이름);
      // 셀에 배경색 추가 (녹색)
      sheet.getRange(row, 10).setBackground("#c8e6c9");
    }
  }
  
  // 결과 출력
  Logger.log("=== 출석률 분석 결과 ===");
  
  if (경고학생.length > 0) {
    Logger.log("출석 주의 학생: " + 경고학생.join(", "));
  } else {
    Logger.log("출석 주의 학생 없음");
  }
  
  if (우수학생.length > 0) {
    Logger.log("개근 학생: " + 우수학생.join(", "));
  } else {
    Logger.log("개근 학생 없음");
  }
  
  // 전체 평균 출석률 계산
  let 총출석률 = 0;
  for (let row = 2; row <= 6; row++) {
    let 출석률문자열 = sheet.getRange(row, 10).getValue();
    let 출석률 = parseFloat(출석률문자열);
    총출석률 += 출석률;
  }
  let 평균출석률 = 총출석률 / 5;
  Logger.log("전체 평균 출석률: " + 평균출석률.toFixed(1) + "%");
  
  SpreadsheetApp.getActiveSpreadsheet().toast(
    "분석 완료! 평균 출석률: " + 평균출석률.toFixed(1) + "%", 
    "출석률 분석", 
    5
  );
}
실행하면 출석률에 따라 셀 색상이 변하고 분석 결과가 표시됩니다.
💡 반복문 제어하기
  • break: 반복문을 즉시 종료합니다
  • continue: 현재 반복을 건너뛰고 다음 반복으로 넘어갑니다
  • 중첩 반복문: 반복문 안에 또 다른 반복문을 넣을 수 있습니다
  • 무한루프 주의: while문 사용 시 조건이 항상 true면 무한 반복됩니다
⚠️ 주의사항
  • 조건문에서 등호는 === (비교)와 = (할당)를 구분하세요
  • 반복문의 시작값, 종료조건, 증감값을 정확히 설정하세요
  • 중첩 반복문 사용 시 변수명이 겹치지 않도록 주의하세요 (i, j, k 등)
  • 무한루프가 발생하면 스크립트 실행 시간 제한(6분)에 걸릴 수 있습니다
🎯 3차시 정리
이번 시간에는 조건문과 반복문을 배우고, 실제 출석부 관리 시스템을 만들어보았습니다.
조건문과 반복문은 프로그래밍의 핵심이며, 이를 조합하면 복잡한 작업도 자동화할 수 있습니다.
다음 차시에서는 함수를 만들고 활용하는 방법을 배워보겠습니다.