break는 아래 그림과 같이 반복문을 강제로 빠져나가는 구문이다.
개발을 하다보면 종료조건이 충족되지 않았음에도 임의적으로 반복문을 종료해야 하는 경우가 생긴다. 이러한 상황에서 break
구문을 사용해 반복문 혹은 조건문을 임의로 종료할 수 있다.
보다 쉬운 이해를 위해 직접 코드를 작성해보면서 알아보자.
100보다 작은 수 중에서 5와 8의 최소공배수를 찾는다고 가정하자. 이때 break
구문이 유용하게 사용이 된다.
먼저, 1부터 100까지 반복하는 반복문을 작성하면 다음과 같다.
public class Break {
public static void main(String[] args) {
int lcm=0;
for(int i=1; i<=100; i++) {
}
}
}
다음으로, 5와 8의 최소 공배수를 구하는 코드를 반복문 안에 삽입하면 다음과 같다.
5의 배수일 경우 5로 나누어 떨어지며, 8의 배수일 경우는 8로 나누어 떨어지므로, i%5==0 && i%8==0
이 true
가 되는 경우가 5와 8의 최소 공배수이다.
public class Break {
public static void main(String[] args) {
int lcm=0;
for(int i=1; i<=100; i++) {
if(i%5==0 && i%8==0) {
lcm=i;
}
}
}
}
최소공배수가 구해지면 for 반복문을 더이상 실행할 필요가 없어지므로 break
구문을 사용해 강제로 for 반복문을 종료하고, 결과를 출력한다.
public class Break {
public static void main(String[] args) {
int lcm=0;
for(int i=1; i<=100; i++) {
if(i%5==0 && i%8==0) {
lcm=i;
break;
}
}
System.out.println("LCM: "+ lcm);
}
}
output
LCM: 40
이와 같이 break
구문을 사용해 임의로 반복문을 종료하면서 흐름제어를 쉽게 할 수 있다.
continue는 반복문의 남은 부분을 넘어가고 다시 반복 조건을 확인하는 구문이다.
이번에도 직접 코드를 작성하면서 이해를 해 보자.
1부터 100까지의 수 중에서 5와 7의 공배수를 제외한 수의 합을 구하는 코드를 작성해 보자.
먼저, 100까지 반복하는 반복문을 작성하면 다음과 같다.
public class Contiunue {
public static void main(String[] args) {
int sum=0;
for(int i=1; i<=100; i++) {
}
}
}
다음으로 5와 7의 최소 공배수를 구하는 코드를 삽입하면 다음과 같다.
public class Break {
public static void main(String[] args) {
int sum=0;
for(int i=1; i<=100; i++) {
if(i%5==0 && i%7==0) {// 5와 7의 공배수
}
}
}
}
이때, continue
를 이용해 5와 7의 공배수일 경우에만 값을 더하지 않는 코드는 다음과 같이 작성할 수 있다.
public class Continue {
public static void main(String[] args) {
int sum=0;
for(int i=1; i<=100; i++) {
if(i%5==0 && i%7==0) {
continue;
}
sum+=i;
}
}
}
물론, continue
구문 없이도 코드를 작성할 수 있으나, 가독성이 떨어질 수 있으며, 나머지 구문을 실행하지 않는다는 부분에서 continue
를 사용함으로서 성능향상을 이룰 수 있다.
1부터 홀수만을 차례대로 더할때 합이 1000 이상이 되는 수를 찾고, 합을 출력하는 프로그램을 작성하시오.
1부터 2000까지의 수 중에서 3과 5와 7의 공배수의 갯수와 공배수들의 합을 구하는 프로그램을
contunue
구문을 이용해 작성하시오.
code
public class Q1 {
public static void main(String[] args) {
int cnt=1, sum=0;
while(true) {
sum+=cnt;
if(sum>=1000) {
break;// break를 하면 cnt+=2가 실행이 안되고 바로 반복문이 종료된다.
}
cnt+=2;// cnt+=2를 하면 다시 홀수가 된다.
}
System.out.println("num: "+ cnt);
System.out.println("sum: "+ sum);
}
}
output
num: 63
sum: 1024
code
public class Q2 {
public static void main(String[] args) {
int cnt=0, sum=0;
for(int i=1; i<=2000; i++) {
if(i%3==0 && i%5==0 && i%7==0) {
cnt++;
sum+=i;
continue;
}
}
System.out.println("cnt: "+ cnt);
System.out.println("sum: "+ sum);
}
}
output
cnt: 19
sum: 19950
물론, Q2에서의 continue
의 경우 큰 의미는 없으나, 만약 반복문에 더 많은 코드들이 있다면 유의미한 성능향상이 생길 수 있다.
위 주소에서 code를 다운로드 받아 eclipse로 직접 정답 확인이 가능하다.
https://github.com/isaiahIM/java_basic/tree/main/continue%20and%20break