4장. 제어문
제어문이란?
제어문(Control Statement)은 프로그램의 실행 흐름을 제어하는 문장입니다. 조건에 따라 다른 코드를 실행하거나, 특정 코드를 반복 실행할 수 있게 해줍니다.
제어문의 종류
- 조건문: 조건에 따라 코드를 선택적으로 실행
if,if-else,switch
- 반복문: 조건이 만족되는 동안 코드를 반복 실행
for,while,do-while
- 분기문: 반복문의 흐름을 제어
break,continue
조건문 (Conditional Statements)
if 문
가장 기본적인 조건문으로, 조건이 true일 때만 코드를 실행합니다.
기본 형식
if (조건식) {
// 조건이 true일 때 실행할 코드
}
예제
int score = 85;
if (score >= 60) {
System.out.println("합격입니다!");
}
if-else 문
조건이 true일 때와 false일 때 각각 다른 코드를 실행합니다.
기본 형식
if (조건식) {
// 조건이 true일 때 실행할 코드
} else {
// 조건이 false일 때 실행할 코드
}
예제
int age = 20;
if (age >= 18) {
System.out.println("성인입니다.");
} else {
System.out.println("미성년자입니다.");
}
if-else if-else 문
여러 조건을 순차적으로 확인할 수 있습니다.
기본 형식
if (조건식1) {
// 조건식1이 true일 때 실행
} else if (조건식2) {
// 조건식1이 false이고 조건식2가 true일 때 실행
} else if (조건식3) {
// 조건식1, 2가 false이고 조건식3이 true일 때 실행
} else {
// 모든 조건이 false일 때 실행
}
예제
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 if (score >= 60) {
System.out.println("D등급");
} else {
System.out.println("F등급");
}
중첩 if 문
if 문 안에 또 다른 if 문을 사용할 수 있습니다.
int age = 20;
boolean hasLicense = true;
if (age >= 18) {
if (hasLicense) {
System.out.println("운전 가능합니다.");
} else {
System.out.println("면허가 필요합니다.");
}
} else {
System.out.println("미성년자는 운전할 수 없습니다.");
}
삼항 연산자 (Ternary Operator)
간단한 if-else 문을 한 줄로 표현할 수 있습니다.
// 형식: 조건식 ? 값1 : 값2
// 조건식이 true이면 값1, false이면 값2
int age = 20;
String status = (age >= 18) ? "성인" : "미성년자";
System.out.println(status); // "성인"
switch 문
여러 조건 중 하나를 선택하여 실행할 때 사용합니다. if-else if-else를 더 간결하게 표현할 수 있습니다.
기본 형식
switch (변수) {
case 값1:
// 변수가 값1일 때 실행
break;
case 값2:
// 변수가 값2일 때 실행
break;
case 값3:
// 변수가 값3일 때 실행
break;
default:
// 모든 case에 해당하지 않을 때 실행
break;
}
예제
int day = 3;
String dayName;
switch (day) {
case 1:
dayName = "월요일";
break;
case 2:
dayName = "화요일";
break;
case 3:
dayName = "수요일";
break;
case 4:
dayName = "목요일";
break;
case 5:
dayName = "금요일";
break;
case 6:
dayName = "토요일";
break;
case 7:
dayName = "일요일";
break;
default:
dayName = "잘못된 요일";
break;
}
System.out.println(dayName); // "수요일"
break 문의 중요성
break 문이 없으면 다음 case도 계속 실행됩니다 (fall-through).
int num = 2;
switch (num) {
case 1:
System.out.println("1");
// break가 없으면 다음 case도 실행됨
case 2:
System.out.println("2");
// break가 없으면 다음 case도 실행됨
case 3:
System.out.println("3");
break;
default:
System.out.println("기타");
}
// 출력: 2, 3 (break가 없어서 case 3도 실행됨)
여러 case를 하나로 묶기
의도적으로 break를 생략하여 여러 case를 같은 코드로 처리할 수 있습니다.
char grade = 'B';
switch (grade) {
case 'A':
case 'a':
System.out.println("우수");
break;
case 'B':
case 'b':
System.out.println("양호");
break;
case 'C':
case 'c':
System.out.println("보통");
break;
default:
System.out.println("기타");
break;
}
switch 표현식 (Java 14+)
Java 14부터는 switch 표현식을 사용할 수 있습니다.
int day = 3;
String dayName = switch (day) {
case 1 -> "월요일";
case 2 -> "화요일";
case 3 -> "수요일";
case 4 -> "목요일";
case 5 -> "금요일";
case 6 -> "토요일";
case 7 -> "일요일";
default -> "잘못된 요일";
};
반복문 (Loop Statements)
for 문
반복 횟수를 알고 있을 때 주로 사용합니다.
기본 형식
for (초기화; 조건식; 증감식) {
// 반복 실행할 코드
}
실행 순서
- 초기화 실행 (한 번만)
- 조건식 확인
- 조건이
true이면 코드 블록 실행 - 증감식 실행
- 2번으로 돌아가 반복
예제
// 1부터 10까지 출력
for (int i = 1; i <= 10; i++) {
System.out.println(i);
}
// 10부터 1까지 출력
for (int i = 10; i >= 1; i--) {
System.out.println(i);
}
// 2씩 증가
for (int i = 0; i <= 10; i += 2) {
System.out.println(i); // 0, 2, 4, 6, 8, 10
}
while 문
조건이 true인 동안 계속 반복합니다. 반복 횟수를 모를 때 주로 사용합니다.
기본 형식
while (조건식) {
// 조건이 true인 동안 반복 실행할 코드
}
예제
int i = 1;
while (i <= 10) {
System.out.println(i);
i++; // 증감식을 직접 작성해야 함
}
// 무한 루프 (주의!)
// while (true) {
// System.out.println("무한 반복");
// }
do-while 문
조건을 나중에 확인하므로, 최소 한 번은 실행됩니다.
기본 형식
do {
// 최소 한 번은 실행할 코드
} while (조건식);
예제
int i = 1;
do {
System.out.println(i);
i++;
} while (i <= 10);
// 조건이 false여도 한 번은 실행됨
int j = 10;
do {
System.out.println(j); // 10 출력
j++;
} while (j < 5); // 조건이 false이지만 한 번은 실행됨
for vs while vs do-while
| 반복문 | 특징 | 사용 시기 |
|---|---|---|
for |
반복 횟수를 알고 있을 때 | 배열 순회, 특정 횟수 반복 |
while |
조건만 확인, 0번 이상 실행 | 조건 기반 반복, 횟수 불명확 |
do-while |
조건을 나중에 확인, 1번 이상 실행 | 최소 한 번은 실행해야 할 때 |
중첩 제어문 (Nested Control Statements)
제어문 안에 또 다른 제어문을 사용할 수 있습니다.
중첩 if 문
int score = 85;
String grade;
if (score >= 90) {
if (score >= 95) {
grade = "A+";
} else {
grade = "A";
}
} else if (score >= 80) {
grade = "B";
} else {
grade = "C";
}
중첩 반복문
반복문 안에 반복문을 사용할 수 있습니다. 주로 2차원 배열이나 구구단 같은 패턴을 만들 때 사용합니다.
예제: 구구단
// 2단부터 9단까지 출력
for (int i = 2; i <= 9; i++) {
System.out.println("=== " + i + "단 ===");
for (int j = 1; j <= 9; j++) {
System.out.println(i + " × " + j + " = " + (i * j));
}
System.out.println();
}
예제: 별 찍기
// 직각삼각형
for (int i = 1; i <= 5; i++) {
for (int j = 1; j <= i; j++) {
System.out.print("*");
}
System.out.println();
}
// 출력:
// *
// **
// ***
// ****
// *****
중첩 제어문의 주의사항
- 너무 깊은 중첩은 코드 가독성을 떨어뜨립니다 (일반적으로 3단계 이상은 피하는 것이 좋음)
- 각 제어문의 범위를 명확히 구분해야 합니다
break 문
break 문은 반복문이나 switch 문을 즉시 종료합니다.
switch 문에서의 break
switch (num) {
case 1:
System.out.println("1");
break; // switch 문 종료
case 2:
System.out.println("2");
break;
default:
System.out.println("기타");
break;
}
반복문에서의 break
가장 가까운 반복문 하나만 종료합니다.
// 1부터 10까지 출력하되, 5가 되면 종료
for (int i = 1; i <= 10; i++) {
if (i == 5) {
break; // 반복문 종료
}
System.out.println(i);
}
// 출력: 1, 2, 3, 4
// 중첩 반복문에서 break
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; j++) {
if (j == 2) {
break; // 안쪽 for 문만 종료
}
System.out.println("i=" + i + ", j=" + j);
}
}
// 출력:
// i=1, j=1
// i=2, j=1
// i=3, j=1
레이블과 함께 사용하는 break
중첩 반복문에서 특정 반복문을 종료하려면 레이블을 사용합니다.
outer: for (int i = 1; i <= 3; i++) {
inner: for (int j = 1; j <= 3; j++) {
if (j == 2) {
break outer; // outer 레이블의 반복문 종료
}
System.out.println("i=" + i + ", j=" + j);
}
}
// 출력: i=1, j=1 (outer 반복문이 종료됨)
continue 문
continue 문은 현재 반복을 건너뛰고 다음 반복을 계속합니다.
기본 사용법
// 1부터 10까지 출력하되, 5는 건너뛰기
for (int i = 1; i <= 10; i++) {
if (i == 5) {
continue; // 현재 반복 건너뛰고 다음 반복 계속
}
System.out.println(i);
}
// 출력: 1, 2, 3, 4, 6, 7, 8, 9, 10
// 짝수만 출력
for (int i = 1; i <= 10; i++) {
if (i % 2 != 0) {
continue; // 홀수는 건너뛰기
}
System.out.println(i);
}
// 출력: 2, 4, 6, 8, 10
while 문에서의 continue
int i = 0;
while (i < 10) {
i++;
if (i % 2 == 0) {
continue; // 짝수는 건너뛰기
}
System.out.println(i);
}
// 출력: 1, 3, 5, 7, 9
주의: while 문에서 continue를 사용할 때는 무한 루프에 빠지지 않도록 주의해야 합니다.
int i = 0;
while (i < 10) {
if (i % 2 == 0) {
continue; // i가 증가하지 않아 무한 루프!
}
System.out.println(i);
i++;
}
레이블과 함께 사용하는 continue
중첩 반복문에서 특정 반복문의 다음 반복으로 건너뛸 수 있습니다.
outer: for (int i = 1; i <= 3; i++) {
inner: for (int j = 1; j <= 3; j++) {
if (j == 2) {
continue outer; // outer의 다음 반복으로
}
System.out.println("i=" + i + ", j=" + j);
}
}
// 출력:
// i=1, j=1
// i=2, j=1
// i=3, j=1
제어문 종합 예제
public class ControlStatementExample {
public static void main(String[] args) {
// 1. 조건문 예제
int score = 85;
if (score >= 90) {
System.out.println("A등급");
} else if (score >= 80) {
System.out.println("B등급");
} else {
System.out.println("C등급 이하");
}
// 2. 반복문 예제
System.out.println("\n1부터 10까지:");
for (int i = 1; i <= 10; i++) {
System.out.print(i + " ");
}
// 3. 중첩 반복문 예제
System.out.println("\n\n구구단 2단:");
for (int i = 1; i <= 9; i++) {
System.out.println("2 × " + i + " = " + (2 * i));
}
// 4. break 예제
System.out.println("\n5에서 멈춤:");
for (int i = 1; i <= 10; i++) {
if (i == 5) {
break;
}
System.out.print(i + " ");
}
// 5. continue 예제
System.out.println("\n\n짝수만 출력:");
for (int i = 1; i <= 10; i++) {
if (i % 2 != 0) {
continue;
}
System.out.print(i + " ");
}
}
}
연습 문제
조건문
- 나이를 입력받아 성인/미성년자를 판단하고, 성인이면 운전 가능 여부를 확인하는 프로그램을 작성하세요.
switch 문
- 월(1~12)을 입력받아 해당하는 계절을 출력하는 프로그램을 작성하세요.
반복문
- 1부터 100까지의 합을 계산하는 프로그램을 작성하세요 (for, while, do-while 각각 사용).
중첩 반복문
- 구구단 전체(2단~9단)를 출력하는 프로그램을 작성하세요.
break와 continue
- 1부터 100까지의 수 중에서 3의 배수만 출력하되, 50을 넘으면 종료하는 프로그램을 작성하세요.
다음 장 예고
다음 장에서는 배열(Array)을 사용하여 여러 데이터를 효율적으로 관리하는 방법을 학습합니다.
'BackEnd > Java' 카테고리의 다른 글
| 6장. 메서드(Method) (0) | 2025.12.31 |
|---|---|
| 5장. 배열과 문자열 (0) | 2025.12.30 |
| 3장. 연산자 (0) | 2025.12.29 |
| 2장. 변수와 자료형 (0) | 2025.12.28 |
| 1장. Java 시작하기 (0) | 2025.12.26 |