본문 바로가기
Programming/Java

[Java] 5. 반복문

by Rayched 2022. 10. 11.

1. 개요

이번에 설명할 것은 앞에서 설명한 조건문과 같이 제어문 중 하나인 '반복문'에 대해서다.

반복문의 사전적인 정의를 내보자면

"프로그램 내부에서 특정한 코드가 반복적으로 수행할 수 있게 하는 명령문"이라 할 수 있다.

 

우리가 간단한 계산기 프로그램을 만든다고 해보자.

우선 숫자를 입력하고 그 숫자로 사칙연산을 하는 등의 여러 가지 연산을 할 것이다.

그런데 여기서 프로그램 소스코드에 반복문이 들어가지 않는다면

해당 프로그램은 계산을 한 번만 하고, 다시 하려면 프로그램을 종료하고 다시 실행시켜야 할 것이다.

하지만 반대로 반복문이 소스코드 안에 들어간다면 계산을 한번 하고 프로그램을 재실행해야 하는 번거로움이 없다.

반복문이 있으면 프로그램이 실행되는 동안 특정 코드, 계산을 담당하는 부분이 반복해서 실행될 테니 말이다.

 

그러면 이제 자바에서 사용되는 반복문은 무엇이 있을까?

자바에서 사용되는 반복문으로는 'while 문', 'do/while 문', 'for 문', 'for each 문'이 존재한다.

이들에 대해선 순서대로 차근차근 알아가도록 하자.


2. while 문

① while 문의 정의

- 특정한 조건을 만족할 때까지 계속해서 주어진 명령을 반복해서 실행하는 반복문

   여기서 조건을 만족하는 것은 해당 조건이 참(true)이라는 것이고

   반대로 조건을 만족하지 못한다는 것은 해당 조건이 거짓(false)이라는 것이다.

 

- 조건식을 명확하게 명시하지 않는다면 프로그램이 반복문을 빠져나가지 못하고

   계속해서 실행되는 무한 루프 현상이 발생하므로, 반복문이 종료될 수 있는 조건을 반드시 명시해줘야 한다.

//while 문 기본 구조

while (/*조건식*/){
//조건식이 참(true)이면 명령문을 실행, 거짓(false)이면 명령문을 실행하지 않음
	//실행할 명령문
}

 

② while 문 예제

while 문이 어떤 식으로 동작하는 지를 설명하기 위해서 숫자를 1부터 10까지 출력하는 코드를 하나 작성하겠다.

일단 숫자를 1부터 10까지 출력하려면 변수 여러 개를 만들고 값을 입력하고 출력시키는 식도 가능하기는 하다.

하지만 이러면 코드의 길이가 너무 길어지고, 비효율적이다.

그러니 while 문을 활용해서 아래와 같은 짧은 코드를 작성하고, 실행해보겠다. 

public class Main {
	public static void main(String[] args){
    	int num = 1; //int형 변수 num 선언, 정수 1을 저장
        
        while (num < 11){
        //조건식은 'num < 11'으로, 변수 num에 저장된 값이 11보다 작으면
        //해당 조건식이 참(true)이므로 아래의 명령이 실행된다.
        	System.out.println(num); //변수 num에 저장된 값을 출력한다.
            num++; //num에 저장된 값을 1 증가시킨다.
        }
        //프로그램을 실행하면 변수 num에 저장된 값 '1'이 출력된다.
        //이후 증감 연산자 'num++'에 의해 저장된 값이 1 증가된다. (1 -> 2)
        //while문은 조건식이 참인 동안 코드를 반복해서 실행한다.
        //따라서 변수 num에 저장된 값 2가 11보다 작으므로 (조건식==true)
        //변수 num에 저장된 값 2가 console 창에 출력되고, 증감 연산자에 의해 1 증가한다.
        //이하의 과정을 변수 num에 저장된 값이 11 이상이 될 때까지 반복한다.
        //(num에 저장된 값이 11 이상이 되면 조건식은 false가 되어, 실행 종료)
    }
}

while 문 예제 실행 결과

프로그램을 실행하면 console 창에 1부터 10까지 정상적으로 출력됐다. 

이러한 결과가 나오게 된 이유는 코드 옆에 같이 쓴 주석 문을 참고하면 될 것이다.


3. do/while 문

① do/while 문의 정의

- while 문에서 조금 변형된 형태의 반복문이다.

- while 문은 조건식이 참(true)이면 실행하고, 거짓(false)이면 실행하지 않지만

  do/while 문은 1회 실행한 후에, 조건식을 확인해서 참(true)이면 반복해서 실행하고

  거짓(false)이면 더 이상 실행하지 않는다.

- 조건식의 참/거짓 여부에 상관없이 무조건 1번은 실행하는 반복문

//do/while 문 기본 구조

do {
	//실행할 명령문
}while(/*조건식*/);
//무조건 1번은 실행하고, 조건식이 참이면 명령문을 반복해서 실행한다.
//조건식이 거짓인 경우에는 반복하지 않음.

 

② do/while 문 예제

do/while 문의 정의와 프로그래밍에서의 기본 구조를 알았으니

앞에서 했던 것처럼 코드를 작성하고 실행시켜보겠다.

public class Main {
	public static void main(String[] args){
    	int num = 1; //integer형 변수 'num' 선언 및 정수 1을 저장
        System.out.println("=== 숫자 카운트 ===");
        
        do {
        	System.out.printf("숫자 : %d\n",num); //변수 num의 현재 값을 출력
            num++; //num에 저장된 값을 1 증가
        }while (num <= 10);
        //프로그램을 실행하면 변수 num에 저장된 값인 1이 출력되고
        //증감자 'num++'에 의해 값이 1 증가한다. (1 -> 2)
        //그 후, 조건식을 확인한다.
        //조건은 'num <= 10'이다.
        //변수 num에 저장된 값은 2로, 10보다 작다. (조건식 == true)
        //console 창에 num에 저장된 값인 2가 출력되고, 저장된 값이 1 증가한다. (2 -> 3)
        //이하의 과정을 num에 저장된 값이 10보다 크거나 같아질 때까지 반복한다.
    }
}

do/while 문 예제 실행 결과


4. for 문

① for 문의 정의

- 반복문 중 제일 많이 사용되는 반복문으로, while 문에서 조금 개선된 형태이다.

- '시작 조건', '실행 조건', '증감식' 세 가지로 구성됐다.

- break 명령을 사용하면 언제든지 for 문에서 빠져나올 수 있다.

  (이는 while 문, do/while 문도 마찬가지임)

//for 문 기본 구조

for(/*시작 조건; 실행 조건; 증감식*/){
	//실행할 명령문
}
/* for문 설명
 * (1). 시작 조건
    - 변수 하나를 선언하고 값을 지정한다. (변수 초기화)
    - for 문 밖에서 선언된 변수의 값을 변경 가능
    - 시작 조건은 for문 실행 시 딱 1번만 실행된다.
   (2). 실행 조건
    - 조건식을 만족하는 경우(true), 명령문을 실행하고
      조건식을 만족하지 않는 경우(false), 명령문을 실행하지 않고
      for 문을 빠져나옴.
   (3). 증감식
    - 시작 조건으로 선언한 변수의 값을 변경 가능
    - 값을 먼저 증가시키고, 출력하는 전위 연산자를 사용하는게 아니면
      명령문을 실행하고 나서, 변수의 값을 증가/감소시킨다.

 

② for 문 예제

for문의 정의와 기본 구조를 알았으니, 예제 코드를 작성 및 실행을 해보고

반복문 설명을 마치도록 하겠다.

//for문 예제
//문제: for 문을 활용해서 구구단 4단 출력하기

public class Main {
	public static void main(String[] args){
    	final int dan = 4; //integer형 상수 dan 선언 및 정수 4를 저장
        //이번엔 dan의 값을 변경하지 않을 것이므로 상수로 선언하였음
        //변수로 변경하려면 'final'만 지우면 된다.
        
        System.out.printf("=== %d단 출력 시작 ===\n", dan);
        for (int i = 1; i <= 10; i++){
        //시작 조건: 'int i = 1;' (int형 변수 i 선언 및 값을 1로 초기화)
        //실행 조건: 'i <= 10;'
        //증감식: 'i++'
        	System.out.printf("%d * %d = %d\n", dan, i, dan * i);
        }
        System.out.printf("=== %d단 출력 종료 ===", dan);
        //프로그램을 실행, 변수 i의 현재 값은 1이다.
        //따라서 조건식 'i <= 10'이 true이므로 명령문을 실행
        //상수 dan과 변수 i에 저장된 값을 곱한 결과가 출력된다. (4*1=4)
        //이후 증감식에 의해 i에 저장된 값이 1 증가한다. (1 -> 2)
        //다시 조건식을 확인하고, true이므로 명령문 출력 후 값을 1 증가시킨다.
        //(출력: 4*2=8) (변수 i의 값: 2 -> 3)
        //이하의 과정을 조건식이 false가 될 때까지 반복한다. (i가 10보다 커질 경우)
    }
}

for문 예제 출력 결과

구구단 4단이 1부터 10까지 출력되고, for 문을 빠져나오는 것을 위의 출력 결과를 통해서 확인할 수 있다.


 

5. for each 문

① for each문의 정의

public class Main {
	public static void main(String[] args){
    	int[] arr = {10, 20, 30, 40, 50};
        
        //for each
        for(int value: arr){
        	System.out.println(value);
        }
        /* for('type''name': 'iterate'){
        	//반복해서 실행할 명령
        }
         * iterate: 루프를 돌릴 객체
           iterate 부분에 들어갈 수 있는 자료형은
           배열이나 ArrayList와 같은 루프를 돌릴 수 있는 자료형만 가능하다.
         */
    }
}

for each는 일종의 향상된 for문으로

배열의 항목 수만큼 실행 부분을 반복하는 반복문이다.

반복이 이뤄질 때마다, 배열 arr의 항목을 순서대로 꺼내서 변수 value에 자동으로 대입시켜준다.

해당 소스코드를 그대로 복사해서 한 번 실행해보자.

배열 arr에 입력한 값, 5개가 순서대로 변수 value에 정상적으로 대입된 것을 확인할 수 있다.


6. 마치며

지금까지 티스토리에 글을 쓰면서 이런 형태로 글을 쓴 것은 처음이다.

특별한 양식이 없다보니 글의 형태가 전체적으로 중구난방이지만

이번에 사용한 양식은 가독성 적인 부분에서 이전보다는 조금 나은 편인 것 같다.

자바 공부를 하면서 정리한 내용을 다시 살을 붙여서 블로그에 올리는 것은 계속 할 것 같다.

이렇게 해두는 것은 추후에 내가 해당 내용에 대해 다시 찾아볼 필요가 있을 때를 대비해서

여러 내용들을 참고해서 내게 맞는 방식으로 컨버전 해놓으면 보기 편하기 때문이다.

'Programming > Java' 카테고리의 다른 글

[Java] 6. 배열 (Part 2)  (0) 2022.10.19
[Java] 6. 배열 (Part 1)  (0) 2022.10.19
[Java] 4. 조건문  (1) 2022.10.05
[Java] 3. 연산자  (0) 2022.09.23
[Java] 2. 데이터 타입과 형변환  (1) 2022.09.21