1. Introduction
Java 프로그래밍을 배우면서 루프 처리는 필수적인 기본 구조 중 하나입니다. 그 중 continue 문은 종종 간과되기 쉽지만, 올바르게 사용하면 코드 가독성과 효율성을 크게 향상시킬 수 있습니다.
continue 를 사용하면 특정 조건이 충족될 때 루프의 현재 반복만 건너뛰고 다음 반복으로 진행할 수 있습니다. 예를 들어 배열에서 특정 값을 제외하거나 불필요한 계산을 피하고 싶을 때 유용합니다.
이 글에서는 java continue 의 기본 사용법부터 실용 예제, 그리고 다른 루프 제어문과의 차이점까지 모두 설명합니다. continue 를 완전히 이해하지 못한 채 사용해 본 초보자든, 중급 개발자든 이 가이드를 통해 자신 있게 활용할 수 있게 될 것입니다.
기본부터 고급 사용법까지 java continue 를 단계별로 살펴보겠습니다.
2. Basic Syntax and Execution Flow
continue 문은 주로 루프 내부에서 사용됩니다. Java에서는 for, while, do-while 등 다양한 루프 구조에서 사용할 수 있습니다. 이 섹션에서는 기본 문법과 동작 방식을 설명합니다.
2-1. Basic Syntax of continue
continue 의 문법은 매우 간단합니다:
for (int i = 0; i < 10; i++) {
if (i % 2 == 0) {
continue; // Skip this iteration when the condition is met
}
System.out.println(i);
}
위 예제에서 i 가 짝수일 때 continue 가 실행되어 System.out.println(i) 가 건너뛰어집니다. 그 결과 홀수만 출력됩니다.
2-2. Loop Flow and How continue Works
continue 가 실행되면 현재 반복에서 이후의 모든 문장이 건너뛰어지고 즉시 다음 반복으로 이동합니다.
다음은 for 루프를 이용한 간략한 흐름도입니다:
- 루프 초기화 (예:
int i = 0) - 조건 검사 (예:
i < 10) - 루프 본문 실행
continue가 실행되면 남은 문장을 건너뛰기- 증감 단계 (예:
i++) - 2단계로 돌아가기
요약하면, continue 는 “현재 반복만 건너뛰기”라는 의미입니다. 복잡한 루프에서도 건너뛰기 조건을 명확히 제어하고 싶을 때 유용합니다.
2-3. When Is continue Useful?
특정 조건에 따라 처리를 건너뛰고 싶을 때, 예를 들어 잘못된 값이나 오류를 무시하고 다음 반복으로 넘어가고 싶을 때 특히 도움이 됩니다.
다음 섹션에서는 효과적인 사용법을 보여주는 실용 예제를 살펴보겠습니다.
3. Practical Code Examples
이 섹션에서는 continue 를 활용한 구체적인 예제를 소개하여 실제 사용 상황을 시각화합니다.
3-1. Using continue in a for Loop: Skipping Specific Values
예를 들어 1부터 10 사이에서 3의 배수를 건너뛰고 싶다면:
for (int i = 1; i <= 10; i++) {
if (i % 3 == 0) {
continue; // Skip multiples of 3
}
System.out.println(i);
}
이 코드는 3, 6, 9를 제외한 모든 숫자를 출력합니다.
3-2. Using continue in a while Loop: Input Validation
사용자 입력을 처리할 때 음수와 같은 잘못된 값을 무시하고 싶을 수 있습니다:
Scanner scanner = new Scanner(System.in);
int count = 0;
while (count < 5) {
System.out.print("Please enter a positive integer: ");
int num = scanner.nextInt();
if (num < 0) {
System.out.println("Negative values are ignored.");
continue;
}
System.out.println("Entered value: " + num);
count++;
}
여기서는 음수 값이 건너뛰어 count 가 증가하지 않습니다.
3-3. Using continue in Enhanced for (for-each) Loops
컬렉션을 순회할 때도 continue 를 사용할 수 있습니다:
String[] names = {"田中", "", "佐藤", "鈴木", ""};
for (String name : names) {
if (name.isEmpty()) {
continue;
}
System.out.println(name);
}
빈 문자열이 아닌 경우만 출력됩니다.
4. Clear Differences Between continue and `break
The continue 문은 종종 break와 비교되지만, 그 동작은 근본적으로 다릅니다.
4-1. 주요 차이점
- continue : 현재 반복을 건너뛰고 다음 반복으로 진행합니다.
- break : 전체 루프를 즉시 종료합니다.
4-2. 코드 비교
continue 예시:
for (int i = 1; i <= 10; i++) {
if (i % 2 != 0) {
continue;
}
System.out.println(i);
}
break 예시:
for (int i = 1; i <= 10; i++) {
if (i == 5) {
break;
}
System.out.println(i);
}
4-3. 사용 가이드라인
- 루프의 일부를 건너뛰고 싶을 때
continue를 사용합니다. - 루프를 완전히 종료하고 싶을 때
break를 사용합니다.
5. 고급 사용법: 라벨이 있는 continue
Java는 라벨이 있는 continue를 지원하며, 이를 통해 중첩된 루프에서 어느 루프를 계속할지 지정할 수 있습니다.
5-1. 기본 구문
outerLoop:
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; j++) {
if (j == 2) {
continue outerLoop;
}
System.out.println("i=" + i + ", j=" + j);
}
}
5-2. 실행 결과
i=1, j=1
i=2, j=1
i=3, j=1
5-3. 가독성 고려사항
라벨이 있는 continue는 중첩 루프 제어를 단순화할 수 있지만, 과도하게 사용하면 가독성이 떨어집니다. 적절히 제한해서 사용하는 것이 권장됩니다.
5-4. 무한 루프 위험
루프 조건을 업데이트하는 로직을 건너뛰는 경우 무한 루프가 발생할 수 있으니 주의하세요.
6. 모범 사례와 함정
6-1. continue 남용 피하기
남용하면 코드 이해가 어려워질 수 있습니다.
6-2. 무한 루프 방지
int i = 0;
while (i < 5) {
if (i == 2) {
continue;
}
i++;
System.out.println(i);
}
이 코드는 i++가 건너뛰어지기 때문에 무한 루프가 발생합니다.

6-3. 팀 개발 시 고려사항
팀 환경에서는 continue를 신중히 사용하고, 의도를 명확히 문서화하세요.
6-4. 대안 고려
때로는 로직을 재구성하거나 조기 반환을 사용하면 continue가 필요 없게 될 수 있습니다.
7. 더 정교한 대안
7-1. Stream API
Arrays.stream(names)
.filter(name -> !name.isEmpty())
.forEach(System.out::println);
7-2. 메서드 분해
for (User user : userList) {
if (isValid(user)) {
process(user);
}
}
7-3. 대규모 개발 관점
가독성과 유지보수성을 우선시하여 Streams와 깔끔한 설계가 선호됩니다.
8. 요약
8-1. 핵심 개념
continue는 현재 반복을 건너뛰고 다음 반복으로 이동합니다.
8-2. break와의 차이점
- break: 루프를 종료합니다
- continue: 한 번의 반복을 건너뜁니다
8-3. 모범 사례
- 과도한 사용을 피합니다
- 무한 루프를 방지합니다
- 가독성 있는 코드를 작성합니다
8-4. 최신 Java 기능 활용
Streams와 메서드 분해는 종종 더 안전한 대안을 제공합니다.
8-5. 실습 과제
- 조건에 따라 요소를 건너뛰기
break와return과 비교하기- Stream API를 사용해 재구현하기
FAQ
Q1. continue와 break 중 어떻게 선택해야 하나요?
continue는 반복을 건너뛰고, break는 루프를 종료할 때 사용합니다.
Q2. 라벨이 있는 continue는 언제 사용해야 하나요?
중첩 구조에서 외부 루프를 건너뛰어야 할 때만 사용합니다.
Q3. Stream API가 continue를 대체할 수 있나요?
네, filter를 사용하면 동일한 효과를 얻을 수 있습니다.
Q4. 무한 루프를 어떻게 방지할 수 있나요?
continue 전에 루프 카운터가 업데이트되는지 확인하세요.
Q5. continue가 성능에 영향을 미치나요?
적절히 사용한다면 큰 성능 영향을 주지 않습니다.
Q6. 프로덕션 코드에서 continue를 권장하나요?
간단한 경우에는 허용되지만, 명확성과 유지보수성을 우선시해야 합니다.


