자바 조건문과 반복문은 프로그램의 실행 흐름을 제어하는 제어문의 핵심이다. 코드는 기본적으로 위에서 아래로 한 문장씩 순차적으로 실행되지만, 조건에 따라 특정 문장을 건너뛰거나 같은 문장을 여러 번 반복해야 할 때가 있다. 이 글에서는 자바 조건문(if·if-else·switch)과 반복문(for·while·do-while)의 문법과 사용법을 예제와 함께 정리한다.
제어문이란
프로그램의 흐름을 바꾸는 역할을 하는 문장을 제어문이라고 한다. 제어문에는 크게 두 종류가 있다. 조건문은 주어진 조건이 참인지 거짓인지에 따라 서로 다른 문장이 수행되도록 하고, 반복문은 특정 조건이 만족되는 동안 같은 문장을 여러 번 반복해서 수행한다.
조건문과 반복문 안에서 여러 문장을 하나로 묶을 때는 중괄호 {} 블록을 사용한다. 블록 안에 문장이 하나뿐이면 중괄호를 생략할 수 있지만, 가독성과 실수 방지를 위해 항상 중괄호를 붙이는 것이 좋다.
자바 조건문
if 문
if 문은 조건식이 참(true)일 때만 블록 안의 문장을 실행한다. 조건식에는 비교 연산자나 논리 연산자를 사용해 true/false를 판별할 수 있는 식이 들어간다.
int score = 85;
if (score >= 60) {
System.out.println("합격입니다.");
}
if-else 문
if-else 문은 조건식이 참일 때와 거짓일 때 각각 다른 문장을 실행한다. 조건이 참이면 if 블록을, 거짓이면 else 블록을 수행한다.
int score = 50;
if (score >= 60) {
System.out.println("합격입니다.");
} else {
System.out.println("불합격입니다.");
}
if-else if 문
처리해야 할 경우의 수가 셋 이상일 때는 if-else if 문을 사용한다. 위에서부터 차례로 조건식을 검사해, 처음으로 참이 되는 블록만 실행하고 나머지는 건너뛴다. 예를 들어 점수에 따라 학점을 매기는 코드는 다음과 같다.
int score = 85;
if (score >= 90) {
System.out.println("A");
} else if (score >= 80) {
System.out.println("B");
} else if (score >= 70) {
System.out.println("C");
} else {
System.out.println("F");
}
중첩 if 문
if 문 안에 또 다른 if 문을 넣은 것을 중첩 if 문이라고 한다. 여러 조건을 단계적으로 검사할 때 사용한다.
int score = 85;
char grade;
if (score >= 80) {
if (score >= 90) {
grade = 'A';
} else {
grade = 'B';
}
} else {
grade = 'C';
}
System.out.println(grade);
switch 문
switch 문은 하나의 변수 값을 여러 값과 비교해 일치하는 case의 문장을 실행한다. 경우의 수가 많고 조건이 단순한 등치 비교일 때, if-else if 문보다 간결하고 읽기 쉽다. 각 case 끝에는 break를 붙여 switch 문을 빠져나가고, 일치하는 case가 없을 때는 default 블록이 실행된다.
int month = 3;
switch (month) {
case 3:
case 4:
case 5:
System.out.println("봄");
break;
case 6:
case 7:
case 8:
System.out.println("여름");
break;
default:
System.out.println("그 외 계절");
}
switch 문에는 제약 조건이 있다. 비교에 사용하는 값은 정수형(byte·short·int), 문자형(char), 문자열(String, 자바 7 이상), 열거형(enum)만 가능하며, case 문에는 변수가 아닌 상수(리터럴)만 올 수 있다. 또한 break를 빠뜨리면 일치한 case 아래의 문장까지 연달아 실행되므로 주의해야 한다.
자바 반복문
for 문
for 문은 반복 횟수가 정해져 있을 때 주로 사용한다. 초기화·조건식·증감식을 한 줄에 모아 쓰기 때문에 반복 구조를 한눈에 파악하기 좋다. 초기화는 처음 한 번만 실행되고, 조건식이 참인 동안 블록을 반복하며, 매 반복이 끝날 때마다 증감식이 실행된다.
for (int i = 1; i <= 5; i++) {
System.out.println(i + "번째 출력");
}
중첩 for 문
for 문 안에 for 문을 넣으면 중첩 for 문이 된다. 구구단이나 별 찍기처럼 행과 열로 이루어진 2차원 반복에 자주 쓰인다.
for (int i = 2; i <= 9; i++) {
for (int j = 1; j <= 9; j++) {
System.out.println(i + " x " + j + " = " + (i * j));
}
}
while 문
while 문은 조건식이 참인 동안 블록을 반복한다. 반복 횟수가 정해져 있지 않고 특정 조건이 만족될 때까지 반복해야 할 때 적합하다. 조건식을 false로 만드는 코드가 블록 안에 없으면 무한 루프에 빠지므로 주의한다.
int i = 1;
while (i <= 5) {
System.out.println(i + "번째 출력");
i++;
}
do-while 문
do-while 문은 while 문과 비슷하지만, 조건식을 블록 실행 뒤에 검사한다. 따라서 조건이 처음부터 거짓이더라도 블록이 최소 한 번은 실행된다는 점이 다르다.
int i = 1;
do {
System.out.println(i + "번째 출력");
i++;
} while (i <= 5);
break 문과 continue 문
반복문의 흐름을 더 세밀하게 제어할 때 break와 continue를 사용한다. break는 반복문을 즉시 빠져나가고, continue는 현재 반복만 건너뛰고 다음 반복으로 넘어간다.
for (int i = 1; i <= 10; i++) {
if (i == 6) {
break; // i가 6이면 반복 종료
}
if (i % 2 == 0) {
continue; // 짝수면 출력하지 않고 다음 반복으로
}
System.out.println(i); // 1, 3, 5 출력
}
중첩 반복문에서는 이름 붙은 반복문(라벨)을 사용해 안쪽 반복문에서 바깥쪽 반복문까지 한 번에 빠져나갈 수 있다. 반복문 앞에 라벨을 붙이고 break 라벨; 형태로 사용한다.
outer:
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; j++) {
if (i * j > 4) {
break outer; // 바깥 반복문까지 한 번에 종료
}
System.out.println(i + ", " + j);
}
}
정리
- 조건문: 단순 분기는 if·if-else, 여러 갈래는 if-else if, 등치 비교가 많으면 switch.
- 반복문: 횟수가 정해졌으면 for, 조건 기반이면 while, 최소 한 번 실행이 필요하면 do-while.
- 흐름 제어: break는 반복 종료, continue는 현재 반복 건너뛰기, 라벨로 중첩 반복문 한 번에 탈출.
조건문과 반복문은 모든 프로그램의 기본 골격이 되는 문법이다. 위 예제를 직접 작성하며 실행 흐름이 어떻게 바뀌는지 확인해 보면 제어문의 동작을 더 확실히 익힐 수 있다.



💬 댓글 0