Back-End (Web)/JAVA

[JAVA] 반복문

JABHACK 2024. 11. 11. 16:13

이전 글의 조건문과 다르게, 정말 기계 스러운 처리 방식도 존재한다. 기계의 발명은 사람이 하는 작업을 자동화 하고 반복되는 일을 대신하기 위해서 였다. 그 기능에 기반하여 나온 것이 바로 반복문이다.

 

단순히 정말 특정 코드를 반복해서 실행하는 간단한 코드이다. 예시로 for, while, do-while등이 존재하는데 이 3개의 대하여 알아보자

 

  • for 문
    • 특정 조건에 따라 연산을 반복해서 수행하고 싶을 때 사용하는 문맥입니다.
    • for (초기값; 조건문; 증가연산) { (연산) } 형태로 사용합니다.
    • 특정 조건은 초기값과 조건문을 통해서 정의합니다.
    • 반복할 때마다 값을 증가시키려면 증가연산을 정의합니다.
    • 초기값이 조건문을 만족할 때까지 (연산)을 수행하면서 회차마다 증가연산을 수행합니다.
// for 문

for(int i=0; i < 4; i++) { // 변수 i 값은 0 ~ 3 까지 반복
    System.out.println(i + "번째 출력"); // i 변수와 문자열 합치기
}

// 출력
0번째 출력
1번째 출력
2번째 출력
3번째 출력

 

  • 향상된 for 문
    • for 소괄호 안에 값이 3개나 들어가기 때문에 이걸 2개로 줄여주는 방법이 향상된 for문 입니다.
    • 향상된 for 문은 연속된 변수 목록을 출력할 때 쓰입니다.
    • for (변수 타입 변수 명 : 목록변수) { (연산) } 형태로 사용합니다.
    • 변수 타입 과 변수 명 은 for 문안에서 연산을 수행할 변수를 정의합니다.
    • 목록변수는 3,6,9,12,15 처럼 값여러개를 하나의 변수로 저장하고 싶을 때 사용합니다.
// 향상된 for 문

int[] numbers = {3,6,9,12,15};
for(int number: numbers) {
    System.out.print(number + " "); 
}

// 출력
3 6 9 12 15`

 

향상된 for문의 경우 리스트에서 [ 3, 6, 9, 12, 15 ]를 저장함과 동시에 변수 5개가 정의 되어 있음으로 증가연산과 같은 추가적인 계산이 필요 없게 되었다. 실제로 이해가 안될 수 있으니 아래의 코드를 참고해 보자

더보기
더보기

// 만약 기존 for 문으로 구현한다면?

int[] numbers = {3,6,9,12,15};
for(int i = 0; i < numbers.length; i++) { // 배열에 .length 를 붙이면 길이값이 응답됩니다.
    System.out.println(numbers[i]);
}

// 출력
3 6 9 12 15

 

  • while 문, do-while 문
    • for 문과 동일하게 특정 조건에 따라 연산을 반복해서 수행하고 싶을 때 사용하는 문맥입니다.
    • 다만, 초기값 없이 조건문만 명시하여 반복합니다.
    • while(조건문) { (연산) } 형태로 사용합니다. (while 문)
      • 위처럼 while 문으로 사용하면 조건문을 만족해야지만 연산이 반복 수행됩니다.
      • 한번 반복할 때마다 조건문을 체크해서 조건문이 불만족(false) 이면 반복을 중단합니다.
    • do { (연산) } while(조건문) 형태로도 사용합니다. (do-while 문)
      • 위처럼 do-while 문으로 사용하면 최초 1회 연산 수행 후 조건문을 체크하여 더 반복할지 결정합니다.
      • 반복하게 된다면 그 이후에는 한번 반복할 때마다 조건문을 체크해서 조건문이 불만족(false) 이면 반복을 중단합니다.
    • break 명령
      • break; 명령을 호출하면 가장 가까운 블럭의 for 문 또는 while 문을 중단합니다. (또는 switch)
      • 반복문 안에서 break; 형태로 사용합니다.
    • continue 명령
      • for 문 또는 while 문에서 해당 순서를 패스하고 싶을 때 continue 명령을 사용합니다.
      • 반복문 안에서 continue; 형태로 사용합니다.
public class LoopExample {
    public static void main(String[] args) {
        int num = 1;

        // while 문을 사용하여 1부터 10까지의 숫자 출력
        while (num <= 10) {
            if (num % 2 == 0) {
                // 짝수일 경우 continue로 건너뜁니다. (아래의 println~num++까지 전부 스킵)
                num++;
                continue;
            }

            System.out.println("while loop, num = " + num);

            if (num == 7) {
                // num이 7일 때 반복 종료
                break;
            }

            num++;
        }

        System.out.println("End of while loop");

        // do-while 문을 사용하여 최소 1회 실행 후 조건 확인
        int doNum = 10;
        do {
            System.out.println("do-while loop, doNum = " + doNum);
            doNum--;
        } while (doNum > 5);

        System.out.println("End of do-while loop");
    }
}

// 결과
// while loop, num = 1
// while loop, num = 3
// while loop, num = 5
// while loop, num = 7
// End of while loop
// do-while loop, doNum = 10
// do-while loop, doNum = 9
// do-while loop, doNum = 8
// do-while loop, doNum = 7
// do-while loop, doNum = 6
// End of do-while loop

 

이해를 돕기 위해 설명하면,

 

  • while 루프 부분:
    • num이 1일 때 출력한 후 num++를 통해 num이 2가 됩니다.
    • num이 2일 때는 num++실행 후 (num=3) continue가 실행되어 건너뛰고 다음 반복으로 넘어갑니다.
    • num이 3이되고 println을 만나 'num = 3'이 입력됩니다.
    • 위의 3과정이 반복됩니다.
    • 이 과정이 반복되어 num이 7일 때 break로 인해 while 루프가 종료됩니다.
  • do-while 루프 부분:
    • doNum이 10일 때 최초 출력하고, 이후 doNum--를 통해 9, 8, 7, 6으로 감소하면서 반복됩니다.
    • doNum이 5보다 작아지면 조건에 따라 do-while 루프가 종료됩니다.

 

 

 

이를 실제로 응용하면 아래와 같이 돌아간다

// 선택적 구구단 생성기

Scanner sc = new Scanner(System.in);
int passNum = sc.nextInt(); // 출력제외할 구구단수 값
for (int i = 2; i <= 9; i++) {
	if (i == passNum) {
		continue;
	}
	for (int j = 2; j <= 9; j++) {
		System.out.println(i + "곱하기" + j + "는" + (i * j) + "입니다.");
	}
}

// 입력
2

// 출력 - 입력값인 2단은 건너띄고 구구단 출력
3곱하기2는6입니다.
3곱하기3는9입니다.
3곱하기4는12입니다.
... 중략 ...
9곱하기8는72입니다.
9곱하기9는81입니다.

 

'Back-End (Web) > JAVA' 카테고리의 다른 글

[JAVA] 참조형 자료구조 정리(LIST / STACK / QUEUE / SET / MAP)  (0) 2024.11.11
[JAVA] 배열  (0) 2024.11.11
[JAVA] 조건문  (0) 2024.11.11
[JAVA] 연산자  (0) 2024.11.11
[JAVA] 변수와 변수 종류  (0) 2024.11.11