NGMsoftware

NGMsoftware
로그인 회원가입
  • 매뉴얼
  • 학습
  • 매뉴얼

    학습


    Java 14. Java 흐름 제어의 반복문. (Flow Control, Iteration Statement)

    페이지 정보

    본문

    안녕하세요. 소심비형입니다. 오늘은 흐름 제어의 마지막인 반복문에 대해서 알아보겠습니다. 지금까지 예제에서 사용된 do, for, foreach, while이 이에 해당됩니다. 반복문을 이용하여 루프를 만들고, 루프의 종료 기준에 따라 포함된 문을 여러번 실행할 수 있습니다. 반복문은 점프문이 있는 경우를 제외하고 순서대로 실행됩니다.

     

    1. Do~While.

    do문은 while에 지정된 식이 false가 될 때까지 { }로 묶인 하나의 문 또는 블록을 반복하여 실행합니다.

    package FlowControl;
     
    public class DoWhile {
        public static void main(String[] args) {
            int i = 10;
            
            do {
                System.out.printf("a) i : %d%n", i--);
            } while (i > 0);
            
            do {
                System.out.printf("b) i : %d%n", i--);
            } while (i > 0);
        }
    }
    

     

     

    do~while 루프는 while문과 달리 조건식이 계산되기 전에 한번 실행됩니다. do~while 블록 내의 모든 위치에서 break문을 사용하여 루프를 벗어날 수 있고, continue문을 사용하여 while식 계산 문을 직접 단계별로 실행할수도 있습니다. 식이 true면 루프의 첫번째 문에서 실행이 계속됩니다. 식이 false면 do~while루프 다음의 첫번째 문에서 실행이 계속됩니다.

     

    2. while

    while문은 지정된 식이 false가 될 때까지 하나의 문 또는 문 블록을 반복합니다. 각 루프를 실행하기 전에 while식을 테스트하기 때문에 while루프는 0번 이상 실행됩니다. 이는 한번 이상 실행되는 do~while와 다른 부분입니다.

    package FlowControl;
     
    public class DoWhile {
        public static void main(String[] args) {
            int i = 10;
            
            while (i > 0) {
                System.out.printf("a) i : %d%n", i--);
            }
        }
    }
    

     

     

    만약, 무한으로 반복하면서 특정 루틴을 처리하려면 아래와 같이 조건을 무조건 true(참)로 지정하면 됩니다.

    package FlowControl;
     
    public class DoWhile {
        public static void main(String[] args) {
            int i = 10;
            
            while (true) {
                System.out.printf("i : %d%n", i++);
            }
        }
    }
    

     

     

    3. for

    우리가 가장 흔하게 사용하는 반복문입니다. for루프는 지정된 식이 false가 될 때까지 하나의 문 또는 블록을 반복하여 실행합니다. for루프를 사용하면 쉽게 배열을 반복하고 순차적으로 처리할 수 있습니다. 아래의 예제를 통해서 for 문이 어떻게 동작하는지 순서를 확인할 수 있습니다.

    package FlowControl;
     
    public class For {
        public static int Init() {
            System.out.println("초기자");
            return 0;
        }
     
        public static int Comp() {
            System.out.println("비교");
            return 5;
        }
     
        public static int Inc(int i) {
            System.out.println("반복");
            return ++i;
        }
     
        public static void main(String[] args) {
            for (int i = Init(); i < Comp(); i = Inc(i))
                System.out.println("NG");
        }
    }

     

     

    for문은 루프를 실행하기 전에 조건식을 테스트하므로 0번 이상 실행됩니다. 만약, for문을 이용하여 무한 루프를 만들려면 아래와 같이 작성할 수 있습니다. 반복기의 인수가 정수형이므로 오버플로우가 발생하기 전에 종료해야 합니다.

    package FlowControl;
     
    public class For {
        public static void main(String[] args) {
            int i = 0;
            
            for (;;) {
                System.out.println(i++);
                
                if (i == Integer.MAX_VALUE)
                    break;
            }
        }
    }
    

     

     

    어떤 2차원 배열(x, y)과 같은 식 또는 좌표값을 계산할 때는 for문을 중첩해서 사용할수도 있습니다.

    package FlowControl;
     
    public class For {
        public static void main(String[] args) {
            for (int x = 0; x < 5; x++) {
                for (int y = 0; y <= x; y++) {
                    System.out.print("*");
                }
                System.out.println("");
            }
        }
    }
    

     

     

    위의 코드를 실행하면 아래와 같은 결과를 볼 수 있습니다.

    Psvw9mJ.png

     

     

    4. for (foreach)

    Java에서는 foreach 예약어가 없습니다. 하지만 for문의 Syntax를 변형하여 동일하게 실행할 수 있습니다.

    foreach문은 배열이나 컬렉션 또는 enum의 요소만큼 반복하여 실행합니다. foreach문은 배열을 반복 실행하여 원하는 정보를 얻는 용도로 사용할 수 있습니다. 하지만, 예측할 수 없는 부작용을 방지하면서 배열의 항목을 추가하거나 제거하는 용도로는 사용할 수 없습니다. 만약, 배열의 항목을 추가하거나 제거해야 한다면 for루프를 사용해야 합니다. foreach에서 항목을 추가하거나 제거하면 java.util.ConcurrentModificationException을 발생 시킵니다.

    ※ Java의 foreach 구문은 1.5 이상부터 사용 가능합니다.

    package FlowControl;
     
    import java.util.ArrayList;
     
    public class Foreach {
        public static void main(String[] args) {
            ArrayList<Object> list = new ArrayList<Object>();
            list.add(true);
            list.add(1);
            list.add("반복문");
            
            for (Object obj : list) {
                System.out.println(obj);
            }
        }
    }
    

     

     

    배열 또는 컬렉션의 각 요소에 대해 포함문이 계속 실행됩니다. 컬렉션의 모든 요소에 대해 해당문이 계속 실행된 후에 제어가 foreach블록 다음 문으로 전달됩니다. foreach블록의 모든 위치에서 break를 사용해서 루프를 벗어나거나 continue를 사용하여 루프의 다음 반복으로 제어를 전달할수도 있습니다. 다른 루프와 마찬가지로 foreach도 return문을 사용하여 종료할 수 있습니다.

    NxaiLO1.gif

    • 네이버 공유하기
    • 페이스북 공유하기
    • 트위터 공유하기
    • 카카오스토리 공유하기
    추천0 비추천0

    댓글목록

    등록된 댓글이 없습니다.