[JAVA] 특정 조건에 반복문 빠져나가기 - 이중 반복문(Loop) 제어 및 빠져나가기(break)

 

Loop 제거문의 기본은 continue와 break일 텐데요.

continue는 만난 이후의 반복내용을 무시하고 다음 루프를 수행,

break는 만난 이후의 반복내용을 무시하고 루프를 종료입니다.


이중 Loop인 경우 내부 루프의 특정조건에 전체 반복을 종료해야된다면,

첫번째 루프의 종료조건 Flag, 두번째 루프의 종료조건 Flag 를 필요로 할 것이고

이 Flag를 제어하는 조건문(if)들이 생기면서 소스의 가독성이나 관리도 힘들어지겠죠.


이번 글은 이중 반복문에서 유용한 제어 키워드를 소개합니다.



1. Loop 제어 정의

첫번째 판매자(Seller) 루프와 두번째 과일(Fruit) 루프를 제어하는 예제입니다.

[Line:9,12] 처럼 각각의 루프에 'sellerBreak', 'fruitBreak'로 종료 키워드를 정의했습니다.

문법은 아래와 같습니다.

제어구문

반복문(for/while/do-while){

            // 반복내용

            // 제어조건 { break 제어구문;}

}

[코드]

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public static void main(String[] args) {
	SpringApplication.run(HyServiceApplication.class, args);


	List<String> arrSeller = Arrays.asList("Kim", "Park", "Hong", "Lee");
	List<String> arrFruit = Arrays.asList("apple", "banana", "melon", "cherry");


	sellerBreak:
	for(String seller : arrSeller) {
		
		fruitBreak:
		for(String fruit : arrFruit) {
			
			System.out.println(String.format("Seller : %s,  Fruit : %s", seller, fruit));
			
				if(fruit.equals("banana")) {
					break fruitBreak;
					// break sellerBreak;
				}	
		} 
	}
	
}

[결과_1]

[fruitBreak]

[결과_2]

[sellerBreak]

위 사진은 두번째 과일(Fruit) 루프특정조건(banana)일 때 종료하여 출력된 결과입니다.

호출한 종료키워드에 따라 다른 결과를 확인하실 수 있습니다.

[결과_1] : fruitBreak를 호출한 결과   : 두번째 과일(Fruit) 루프 종료

[결과_2] : sellerBreak를 호출한 결과  : 첫번째 판매자(Seller) 루프 종료

(fruitBreak 의 경우에는 단순 예제로 단독으로 'break' 키워드만 사용했을 때와 같은 결과를 얻습니다.)



2. 이중 반복(Loop) 제어

종료 조건절의 규칙을 상세화하여 원하는 결과를 얻을 수 있습니다.

[코드]

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public static void main(String[] args) {
	SpringApplication.run(HyServiceApplication.class, args);


	List<String> arrSeller = Arrays.asList("Kim", "Park", "Hong", "Lee");
	List<String> arrFruit = Arrays.asList("apple", "banana", "melon", "cherry");


	sellerBreak:
	for(String seller : arrSeller) {
		
		fruitBreak:
		for(String fruit : arrFruit) {
			
			System.out.println(String.format("Seller : %s,  Fruit : %s", seller, fruit));
			
				if(seller.equals("Park") && fruit.equals("banana")) {
					break sellerBreak;
				}
		} 
	}
	
}

[결과]







0 댓글