[자바 기초] 6강. 노가다는 컴퓨터에게: 반복문(for, while) 완전 정복
지난 시간 복습과 이번 강의 목표
지난 5강에서는 조건문(if)을 통해 상황에 따라 다르게 행동하는 법을 배웠습니다.
하지만 만약 여러분이 "안녕하세요"를 100번 출력해야 한다면 어떻게 하시겠습니까?
System.out.println("안녕하세요");
System.out.println("안녕하세요");
// ... (이걸 100번 복사 붙여넣기 하시겠습니까?)
이건 스마트하지 못합니다. 만약 100번이 아니라 1억 번이라면요? 프로그래밍의 핵심은 **"지루한 반복 작업은 컴퓨터에게 시키는 것"**입니다. 오늘은 단 3줄의 코드로 1억 번의 작업을 처리하는 **반복문(Loop)**에 대해 알아보겠습니다.
1. 횟수가 정해져 있을 때: for 문
가장 많이 쓰는 반복문입니다. **"몇 번 반복해라"**라고 명확하게 명령할 때 사용합니다.
문법 구조
// for (시작값; 언제까지할지; 증감식)
for (int i = 0; i < 5; i++) {
System.out.println("반복 중입니다: " + i);
}
int i = 0: 시작점입니다. (보통 변수 이름i를 씁니다)i < 5: 조건입니다.i가 5보다 작은 동안에는 계속 실행합니다.i++: 한 바퀴 돌 때마다i를 1씩 증가시킵니다.- 결과: i가 0, 1, 2, 3, 4일 때 실행되고, 5가 되는 순간 멈춥니다. (총 5번)
2. 언제 끝날지 모를 때: while 문
횟수가 아니라 **"특정 조건이 만족될 때까지 계속해"**라고 할 때는 while을 씁니다.
예를 들어 게임에서 "사용자가 종료 버튼을 누를 때까지" 같은 상황이죠.
int i = 0;
while (i < 5) {
System.out.println("while문 실행 중: " + i);
i++; // 까먹으면 안 됩니다! (없으면 영원히 실행됨)
}
💡 선생님의 비교:
- for: "운동장 10바퀴 뛰어." (횟수 명확)
- while: "해 질 때까지 뛰어." (조건 명확)
3. 흐름을 바꾸는 기술: break와 continue
반복문을 돌리다가 중간에 멈추거나 건너뛰고 싶을 때 사용합니다.
break(탈출): "그만해!" 하고 반복문을 즉시 박차고 나갑니다.continue(패스): "이번 판만 넘어가고 다음 판 해" 하고 밑에 코드를 무시하고 다시 위로 올라갑니다.
for (int i = 1; i <= 10; i++) {
if (i == 3) {
continue; // 3번은 건너뛰어라 (출력 안 됨)
}
if (i == 6) {
break; // 6번이 되면 멈춰라 (반복문 종료)
}
System.out.println(i + "번 학생 입장");
}
// 결과: 1, 2, 4, 5번만 출력됨
4. 실전 예제: 구구단 출력기
자, 이제 반복문의 꽃인 구구단을 만들어 봅시다.
사용자가 숫자를 입력하면 해당 단을 쫙 뽑아주는 프로그램입니다. Scanner와 for문의 환상적인 조합을 경험해 보세요.
src/Main.java에 작성해 보세요.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("=== 구구단 자판기 ===");
System.out.print("몇 단을 출력할까요? (숫자 입력): ");
int dan = sc.nextInt();
System.out.println("--- " + dan + "단 시작 ---");
// 핵심 로직: 1부터 9까지 반복하며 곱하기
for (int i = 1; i <= 9; i++) {
// 예: 2 * 1 = 2
int result = dan * i;
System.out.println(dan + " X " + i + " = " + result);
}
System.out.println("--- 출력 끝 ---");
}
}
실행 결과
=== 구구단 자판기 ===
몇 단을 출력할까요? (숫자 입력): 7
--- 7단 시작 ---
7 X 1 = 7
7 X 2 = 14
...
7 X 9 = 63
--- 출력 끝 ---
코드는 단 몇 줄이지만, dan에 19를 넣으면 19단도 순식간에 계산해 줍니다. 이게 바로 프로그래밍의 힘입니다.
5. 자주 하는 실수 (무한 루프의 늪)
초보자가 가장 많이 겪는 공포의 상황입니다.
while (true) {
System.out.println("끝나지 않는 노래...");
}
조건이 항상 true이거나, i++를 빼먹어서 조건이 영원히 만족되면 프로그램은 멈추지 않고 계속 돌아갑니다. 컴퓨터가 뜨거워지죠.
- 해결법: 인텔리제이에서는 실행 창의 빨간색 **네모 버튼(Stop)**을 누르면 강제로 끌 수 있습니다. 당황하지 마세요.
6. 마무리
이제 여러분은 **입력(Scanner)**받고, **판단(if)**하고, **반복(for)**하는 프로그래밍의 3대 요소를 모두 갖췄습니다. 이 3가지만 조합하면 이론상 세상의 모든 프로그램을 만들 수 있습니다.
그런데 문제가 하나 있습니다.
만약 학생 30명의 점수를 저장해서 평균을 내고 싶다면?
int score1, score2, ..., score30 변수를 30개나 만들어야 할까요?
다음 **[7강]**에서는 수많은 데이터를 아파트처럼 한 곳에 모아서 관리하는 **배열(Array)**에 대해 배워보겠습니다. 이제 데이터 관리의 혁명이 시작됩니다.