4. 제어문 - (2) 반복문과 제어 키워드

한승록·2023년 4월 7일
0

자바 기초

목록 보기
8/21
post-thumbnail
이전 포스트에서 말씀드렸듯이 이번 포스트에서는 '반복문''제어 키워드'에 대해 설명드리겠습니다.
'반복문' 에는 'while' 문'for' 문이 있습니다.

먼저 'while' 은 중괄호 ' { } ' 안의 실행 구문을 조건에 맞을 때가지 반복 실행하게 됩니다.

1) while 반복문

		int num = 10;
        
		while (num < 20) {	// 조건이 참인 동안 종속문장을 실행한다
			num += 1;
			System.out.println("while) num : " + num);
			// GOTO while
		}

<※ 결과는 다음과 같습니다.>

보시다시피 20보다 작으면 반복문이 실행되는데 마지막 실행에 변수가 20이 저장되고 다음 회차에 변수가 20보다 작다는 조건에 'false' 값이 도출되면서 'while' 반복문이 종료가 되게 됩니다.


'while 문''do ~ while' 형태로 사용할 수 있습니다.
		// 1) while
		int cnt1 = 0;
		while (cnt1 > 5) {
			System.out.printf("cnt1(%d) : Hello", cnt1);
			cnt1 += 1;
		}
		
		
		
		// 2) do ~ while
		int cnt2 = 0;
		do {
			System.out.printf("cnt2(%d) : Hello", cnt2);
			cnt2 += 1;
		} while(cnt2 > 5);

<※ 결과는 다음과 같습니다.>

보시는 것처럼 두 예시 모두 'while 조건문' 의 조건은 충족하지 않지만 cnt2 를 변수로 하는 'do ~ while문' 최초 1회는 실행된 것을 확인하실 수 있습니다.

'do 구문'으로 인해 최초 1회 실행 후 'while 구문' 을 실행할지 결정하게 되는 것입니다.

예시에서는 'do 구문' 실행 후 조건이 맞지 않으니 종료하게 되는 것이죠


그렇다면 조건문이 충족이 되지 않으면 어떻게 될까요?

이를 '무한 반복'이라고 합니다.
		while (num > 0) {
			num += 1;
			System.out.println("infinite loop) num : " + num);
		}
		System.out.println("끝");

<※ 결과는 다음과 같습니다.>

이러한 결과가 의미하는 것이 무엇일까요?

해당 질문에 대한 답은 프로그램 언어의 기본개념으로 돌아갈 필요가 있습니다.

컴퓨터를 구성함에 있어 '3대 요소''연산', '기억', '입출력' 입니다.
이 중에서 저희는 해당 현상을 설명하기 위해 '연산' 을 주목해야 합니다.

'무한 반복'은 결국 '연산' 을 무한으로 실행하는 것으로 이를 실행하는 장치인 'CPU'에 과부화를 주게 됩니다. 그렇다면 보여 드린 예시의 사용율이 100%까지 올라가는데 얼마가 걸렸을까요?

정답은 '2 ~ 3초' 정도의 짧은 시간에 도달했다는 것입니다.

여기까지만보면 '무한 반복'은 그저 오류 구문에 불과하다고 생각하실 수도 있습니다. 그렇지만 '무한 반복' 을 사용해야 되는 경우도 존재합니다.

저희가 평소에 사용하는 '운영체제'가 이에 해당합니다. 컴퓨터를 종료하기 전까지 지속적으로 시스템이 운용이 되어야 하기때문이죠.

하지만 '무한반복' 은 언젠가 끝나야 합니다. 컴퓨터를 종료하는 것처럼 말이죠.


2) 제어키워드

이러한 역할을 수행하는 것이 바로 '제어 키워드''break', 'continue' 가 있습니다.
먼저 설명드릴 '제어 키워드''break' 입니다. 'break' 'if 제어문' 을 제외한 가장 가까운 중괄호({ })를 탈출하는 역할을 수행하게 됩니다. 직전에 말씀드린 '무한 반복' 을 벗어날 수 있는 방법입니다.


		int num = 1;
		while (num > 0) {
			num += 1;
			System.out.println("infinite loop) num : " + num);
			
			// break : 현재 속한 반복문 범위를 아래로 벗어난다
			if (num == 10) {
				break;
			}
		}

<※ 결과는 다음과 같습니다.>

이전의 무한반복 구문에 'if 제어문' 을 통해 조건을 만족하면 'break' 가 실행되면서 반복이 종료됩니다.
'continue' 는 반복문 실행 도중 '조건식' 검색 또는 '증감식'을 수행하게 됩니다.
다음의 예시로 설명을 드려보겠습니다.

옆에 결과값을 보시다시피 처음 보시는 구문이 무한 반복의 구문입니다.

다음 구문을 보시면 num++num-- 사이에 'continue' 를 넣게 되면 'while 구문''조건식'(num < 20) 을 검증하게 되고 'num++'을 계속 실행하기 때문에 'num' 이 조건에 도달하는 순간 'while 구문'종료하게 되면서 'num--'는 실행 될 수가 없게 되는 겁니다.

그럼 이어서 '제어 키워드' 를 활용하여 'for 문'에 대해 설명드리겠습니다.


3-1) for 반복문

'for 문' 은 실행구문을 반복적으로 수행하지만 일반적으로는 반복 횟수가 정해질 때 주로 사용 하게 됩니다.
		for(int i = 0; i < 5; i++) {	// 조건식 = (1)변수선언; (2)조건; (4)증감식
			System.out.print(i);
			System.out.println(" : Java");	// (3)종속문장
		}
		// 실행 순서 : 1 → 2 → 3 → 4 → 2 → 3 → 4 → 2 → 3 → 4

<※ 결과는 다음과 같습니다.>

보시는 바와 같이 'for 반복문' 의 소괄호안에서 '변수 선언'이 이루어지는데 이때 선언된 변수는 최초로 실행 시 1회만 실행되며 해당 반복문 안에서만 사용됩니다.

'조건'은 해당 반복문의 횟수를 제어하며 만약 조건을 기입하지 않는다면 '무한반복'이 실행되게 됩니다.

마지막으로 '증감식''종속 구문' 실행 후 가장 마지막으로 실행됩니다.


3-2) for 중첩 반복문

'중첩된 for 반복문' 은 다수의 값을 2개 이상의 기준으로 나누어서 처리하고 싶을 때 사용합니다.

		int num = 1;
		
		for(int i = 0; i < 5; i++) {	// 세로 줄을 결정짓는 요소
			for(int j = 0; j < 5; j++) {// 가로 칸을 결정짓는 요소
				System.out.printf("(%d, %d) : %2d\t", i, j, num);
				num++;
			}
			System.out.println();
		}
		System.out.println("끝");

<※ 결과는 다음과 같습니다.>

결과를 보시고 떠오르시는게 있으신가요?

혹시 일차 함수의 (x,y) 좌표로 활용할 수 있지 않을까요?

결과에서 보시다시피 첫번째 'for 반복문'세로줄 즉 'y 좌표'두번째 'for 반복문' 가로줄 즉 'x 좌표' 를 통제할 수 있습니다.

따라서 '배열'이나 '컬렉션'과 연계하여 사용하는 경우가 많습니다.
profile
개발 학습

0개의 댓글