스터디 모음/Java 스터디

[자바 Java] - 이름 있는 반복문 사용하기 / 반복문 / 2중 반복문 break / for / while

always-dev 2022. 7. 7.
반응형

[Java] - 이름 있는 반복문 사용하기 / 반복문 / 2중 반복문 break / for / while


 

 

저는 2중 for문을 중간에 빠져나오기 위해서 boolean을 추가해서 break하는 경우가 많았습니다.

하지만 이런식으로 구현하게되면 코드가 길어지고 가독성조차 떨어지기 마련입니다.

 

근데 다른 방법이 있나 생각만하고 계속해서 사용해오다가 자바 기본서를 다시 읽던 도중에 ‘이름 있는 반복문'이라는 파트를 다시 보게 됐습니다 !

아주 유용하게 사용할 수 있을거 같아서 벌써부터 두근두근 🫣합니다 !!

 

 

 

먼저 break에 대해 아시나요 ?

break란 ?

break문은 근접한 단 하나의 반복문만 벗어날 수 있습니다.

여러 개의 반복문이 중첩된 경우에는 break문 하나로 모든 중첩 반복문을 벗어나기는 어렵습니다.

저는 간단하게 ‘숫자 더하기, 빼기 전용 계산기’ 예시를 들어서 설명하겠습니다.

 

 

 

예제 ) 계산기 프로그램

요구사항은 다음과 같습니다.

  • 첫 숫자는 0으로 초기화 되어있다.
  • 메뉴에서 0 입력 시 더하기 기능입니다
  • 메뉴에서 1 입력 시 빼기 기능입니다.
  • 메뉴에서 99 입력시 프로그램을 종료합니다.

기존에 사용한 2중 반복문 break 방법

class namedForBreakExample {
	
	public static void main(String[] args) {

		int answer = 0;
		boolean programContinue = true;

		Scanner sc = new Scanner(System.in);

 		while(programContinue) {

			System.out.println("메뉴 =======");
			System.out.println("기능을 선택해주세요.");
			System.out.println("1.더하기 2.빼기");

			int menuType = Integer.parseInt(sc.nextLine());

			for(;;) {
				System.out.println("계산 종료 : 0, 전체 종료 : 99");
				System.out.println("계산할 값을 입력하세요: ");
				int temp = Integer.parseInt(sc.nextLine());

				if (temp == 0) {
					System.out.println("계산 기능을 종료합니다.");
					break;
				} else if (temp == 99) {
					System.out.println("프로그램을 종료합니다.");
					programContinue = false;
					break;
				} else {
					if (menuType == 1) {
						answer += temp;
						System.out.print("answer = " + answer);
					} else if (menuType == 2) {
						answer -= temp;
						System.out.print("answer = " + answer);
					}
				}
			}
		}
	}
}

위에 코드를 보면 break 걸릴 부분이 두 가지가 있습니다.

  1. 계산기 기능 종료
  2. 계산기 프로그램 종료

계산기 기능은

for {
	// break;
}

하면 되지만

계산기 프로그램은

boolean programContinue = true;
while (programContinue) {
	for {
		// programContinue = false;
		// break1;
	}
	// break2;
}

while { for {} } 이기 때문에 for문 내에서 while를 break 해줄 수 있어야합니다.

이 때 저는 while을 break해주기 위해서 boolean 타입의 programContinue라는 변수를 true로 초기화 했었습니다.

때문에 위와 같은 코드가 완성되었습니다.

하지만 밑에 있는 ‘이름 붙은 반복문'을 사용하면 더 간단하게 표현할 수 있습니다.

 

 

 

 

 

이름 붙은 반복문 이용하기 🤩

저희는 반복문에 이름을 붙여줄 수 있습니다.

다음과 같이 말입니다

Loop1 : for (;;) {
	// for1
}

이제 for1은 Loop1이라는 이름을 가진 반복문이 되었습니다.

그리고 이 이름 붙은 반복문은 저희는 다음과 같이 활용할 수 있습니다.

continue Loop1;
break Loop1;

이런 식으로 이름이 붙은 반복문을 직접 break, continue 해줄 수 있습니다.

저희는 이러한 기능을 사용해서 이전 계산기 프로그램 예제를 바꿔보겠습니다.

class namedForBreakExample {
	
	public static void main(String[] args) {

		int answer = 0;

		Scanner sc = new Scanner(System.in);

		outer:
		while(true) {

			System.out.println("메뉴 =======");
			System.out.println("기능을 선택해주세요.");
			System.out.println("1.더하기 2.빼기");

			int menuType = Integer.parseInt(sc.nextLine());

			for(;;) {
				System.out.println("계산 종료 : 0, 전체 종료 : 99");
				System.out.println("계산할 값을 입력하세요: ");
				int temp = Integer.parseInt(sc.nextLine());

				if (temp == 0) {
					System.out.println("계산 기능을 종료합니다.");
					break;
				} else if (temp == 99) {
					System.out.println("프로그램을 종료합니다.");
					break outer;
				} else {
					if (menuType == 1) {
						answer += temp;
						System.out.print("answer = " + answer);
					} else if (menuType == 2) {
						answer -= temp;
						System.out.print("answer = " + answer);
					}
				}
			}
		}
	}
}

이로서 programContinue 선언을 할 필요도 없어졌고 어떤 반복문이 break 될 지 좀 더 명확해짐을 알 수 있었습니다 !

반응형

댓글