1. 소개
종종 루프의 모든 반복을 끝까지 실행할 필요 없이 조기에 빠져나와야 할 때가 있습니다 — 예를 들어, 찾고 있던 요소를 발견한 순간입니다. 다른 경우에는 작업의 일부를 건너뛰고 다음 단계로 넘어가야 할 수도 있습니다(예: 데이터를 읽었지만 그 처리는 건너뛰고 싶을 때). 이것이 바로 루프 내부의 흐름 제어입니다.
Java의 break와 continue 연산자는 바로 이를 위해 존재합니다. 이들이 어떻게 동작하는지, 그리고 실제 과제에서 언제 유용한지 알아봅시다.
2. 연산자 break: “정지!”
이론과 문법
break 연산자는 루프의 어느 위치에서든 즉시 빠져나올 때 사용합니다. 프로그램 실행이 break에 도달하는 순간 루프는 즉시 종료되고, 실행은 루프 바로 뒤의 첫 번째 줄부터 계속됩니다.
while (uslovie)
{
if (kakoe-to_uslovie)
{
break;
}
// 루프의 나머지 코드
}
for와 do-while에서도 동일하게 동작합니다:
for (int i = 0; i < 10; i++)
{
if (kakoe-to_uslovie)
{
break;
}
// 루프의 나머지 코드
}
예제 1: 소수 판별
어떤 수가 1과 자기 자신으로만 나누어떨어지면 소수입니다. 주어진 수가 소수인지 확인하려면 2부터 n-1까지의 가능한 모든 약수를 검사하면 됩니다. 만약 어떤 약수로 나누어떨어진다면 더 이상 확인할 필요가 없습니다 — 소수가 아니기 때문이죠! 루프를 종료할 수 있습니다.
예시:
int number = 111;
boolean found = false;
for (int i = 2; i < number; i++)
{
if (number % i == 0)
{
found = true;
System.out.println("약수를 찾았습니다: " + i );
break; // 루프를 멈춥니다. 더 이상 찾을 필요가 없습니다!
}
}
if (!found)
{
System.out.println("약수를 찾지 못했습니다 - 소수입니다.");
}
예제 2: 사용자 입력 검증
간단한 애플리케이션을 만들어 봅시다. 예를 들어, 데이터를 수집하는 대화형 설문입니다:
while (true)
{
System.out.print("나이를 입력하세요: ");
if (console.hasNextInt())
{
int age = console.nextInt();
if (age > 0)
{
System.out.println("좋습니다! 나이: " + age);
break; // 입력이 올바릅니다 — 종료합니다
}
else
{
System.out.println("오류! 양의 나이를 입력하세요.");
}
}
else
{
System.out.println("오류! 숫자를 입력하세요.");
console.nextLine(); // 잘못된 입력을 비웁니다
}
}
왜 필요한가요:
사용자가 올바른 값을 입력할 때까지 루프를 무한(또는 매우 오래) 돌려야 할 때가 있습니다. 원하는 사건이 발생하는 즉시 — break를 적용해 루프를 최종적으로 종료합니다.
3. 연산자 continue: “다음 분!”
이론과 문법
break와 달리, continue 연산자는 루프 전체를 종료하지 않고 오직 현재 반복만 건너뜁니다. 즉, 루프 본문에서 continue 뒤에 있는 코드는 실행되지 않으며 — 다음 반복으로 넘어갑니다.
for (int i = 0; i < 10; i++)
{
if (uslovie)
{
continue;
}
// 이 부분은 continue가 작동하지 않았을 때만 실행됩니다
}
예제 3: 짝수 건너뛰기
범위에서 홀수만 출력해야 한다고 가정해 봅시다. 짝수는 건너뛰어야 합니다.
for (int i = 1; i <= 10; i++)
{
if (i % 2 == 0)
{
continue; // 숫자가 짝수라면 — 아래의 모든 코드를 건너뜁니다!
}
System.out.println("홀수: " + i);
}
무슨 일이 일어나나요:
i = 2, 4, 6...일 때 루프는 continue를 만나자마자 다음 반복으로 넘어가며, System.out.println은 실행되지 않습니다.
단계별 동작 시각화:
| i | i % 2 == 0 | 동작 |
|---|---|---|
| 1 | false | print, continue 없음 |
| 2 | true | continue, print 없음 |
| 3 | false | print, continue 없음 |
| ... | ... | ... |
연산자 break와 continue는 매우 자주 사용됩니다. 사실상 많은 루프에서 만나게 될 것입니다. 곧 익숙해지고 즐겁게 사용할 수 있을 겁니다.
GO TO FULL VERSION