wintertreey 님의 블로그
break continue, for if try catch 본문
며칠전 뜬금없이 break문의 흐름에 의문을 가졌던 적이 있었다. (당황)(당황)
생각난김에 확실히 머리속에 정립하고자 글을 쓰기로 햇다.
break 와 continue
break문
public class BreakExample {
public static void main(String[] args) {
for (int row = 0; row < 3; row++) {
for (int col = 0; col < 5; col++) {
System.out.println("(" + row + ", " + col + ")");
if (row == 1 && col == 3) {
break;
}
}
}
System.out.println("Done.");
}
}
출력결과
(0, 0)
(0, 1)
(0, 2)
(0, 3)
(0, 4)
(1, 0)
(1, 1)
(1, 2)
(1, 3)
(2, 0)
(2, 1)
(2, 2)
(2, 3)
(2, 4)
Done.
row가 0일때, col 0-4까지 출력
row가 1일때, col 0-3까지 출력하고 break문만나 내부 for문 나옴.
row가 2일때, col 0-4까지 출력.
해당 반복문을 즉시 종료.
만약 상단의 예시처럼 중첩된 반복문일경우, 내부 반복문만 종료.
continue문
public class ContinueExample {
public static void main(String[] args) {
for (int i = 0; i < 5; i++) {
if (i == 2) {
continue;
}
System.out.println("i: " + i);
}
System.out.println("Done.");
}
}
출력결과
i: 0
i: 1
i: 3
i: 4
Done.
continue의 조건에 해당하는 경우, 현재의 반복을 중단.
따라서 하단의 "i : 숫자" 이 부분을 출력하지않고 다음 단계의 반복을 진행한다.
둘의 차이를 볼 수 있게 함께 적용한 예시코드도 살펴보자.
public class BreakContinueExample {
public static void main(String[] args) {
for (int i = 0; i < 5; i++) {
if (i == 2) {
System.out.println("Break at i: " + i);
break;
}
if (i == 1) {
System.out.println("Continue at i: " + i);
continue;
}
System.out.println("i: " + i);
}
System.out.println("Done.");
}
}
출력결과
i: 0
Continue at i: 1
Break at i: 2
Done.
break는 반복문을 완전히 종료, continue는 해당 반복만 건너뛰고 다음반복을 진행한다.
따라서
break문의 경우, 무한루프를 특정 조건에서 완전히 종결시킬때 사용
continue문의 경우, 특정 조건에서 예외적으로 건너뛸때 사용한다.
보통 break, continue의 경우 for 문안에서 사용된다.
범위를 넓혀보자.
for문, if else문, try catch 문
정상적인 흐름
public class LoopExample {
public static void main(String[] args) {
for (int i = 0; i < 5; i++) {
try {
if (i % 2 == 0) {
System.out.println("Even number: " + i);
} else {
System.out.println("Odd number: " + i);
}
} catch (Exception e) {
System.out.println("Exception occurred: " + e.getMessage());
}
}
}
}
출력결과
Even number: 0
Odd number: 1
Even number: 2
Odd number: 3
Even number: 4
예외가 발생하지 않으므로 catch블록은 실행되지 않았다.
특정조건에서 반복종료(break문 사용)
public class LoopExample {
public static void main(String[] args) {
for (int i = 0; i < 5; i++) {
try {
if (i == 3) {
throw new Exception("Critical error at i = 3");
} else {
System.out.println("Processing i: " + i);
}
} catch (Exception e) {
System.out.println("Exception occurred: " + e.getMessage());
break;
}
}
}
}
출력결과
Processing i: 0
Processing i: 1
Processing i: 2
Exception occurred: Critical error at i = 3
for문은 0-4 반복시도예정.
i == 3일때, 예외발생! catch 블록으로 이동하고, break문을 만나, 해당 반복문은 종료된다.
특정 조건에서 반복 건너뛰기(continue 사용)
public class LoopExample {
public static void main(String[] args) {
for (int i = 0; i < 5; i++) {
try {
if (i == 2) {
throw new Exception("Skipping i = 2");
} else {
System.out.println("Processing i: " + i);
}
} catch (Exception e) {
System.out.println("Exception occurred: " + e.getMessage());
continue;
}
System.out.println("This happens after processing i: " + i);
}
System.out.println("End of loop.");
}
}
출력결과
Processing i: 0
This happens after processing i: 0
Processing i: 1
This happens after processing i: 1
Exception occurred: Skipping i = 2
Processing i: 3
This happens after processing i: 3
Processing i: 4
This happens after processing i: 4
End of loop.
i == 0, 1, 3, 4
Processing i:
This happens after processing i:
모두 출력된다.
i == 2
if 의 참조건, 예외처리되어 catch구문으로 이동,
Exception occurred:
continue만나 하단의 This happens after processing i 만나지 못하고 해당 반복문 건너뛰고, 다음 반복문으로 넘어감.
try-catch는 예외상황에 대한 대비책으로 사용.
예외가 발생한 경우에도 프로그램이 종료되지 않고 계속 진행될 수 있도록 하기 위한 안전장치인것.