NGMsoftware

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

    학습


    Java 12. Java 흐름 제어의 점프문. (Flow Control, Jump Statement)

    페이지 정보

    본문

    안녕하세요. 소심비형입니다. 오랫만에 자바 기초에 대해서 글을 쓰네요^^; 오늘 이야기할 흐름 제어와 점프문은 대부분의 언어에서 지원하는 기본 문법으로 프로그램을 구성하는 중요한 요소중에 하나입니다. 기초라고는 해도 사람에 따라서 약간 어려울 수도 있습니다. 모든 사람들이 프로그래밍을 한번에 받아들이는 것은 아닙니다. 하지만, 포기하지 않고 계속 따라하다 보면 어느순간 이해하게 되며 이 때 연결되어 있던 다른 의문점들이 같이 해소 되기도 합니다.

     

    C#과 비교하여 이 내용을 보면 좋을듯 합니다. 아래 링크는 C#의 흐름 제어와 점프문에 대한 설명입니다.

    C#의 흐름 제어와 점프문 ]

     

    진행하기에 앞서 이클립스를 실행한 후 아래 그림처럼 패키지를 추가하고, Break 클래스를 추가하세요.

    JFXbxDT.png

     

     

    1. Break.

    아래 코드를 실행하면, 사용자에게 계속 진행할지 물어봅니다. 이 때 "Y"를 입력하면 같은 질문이 반복되고 "N"을 입력하면 응용 프로그램이 종료됩니다.

    package JavaType;
     
    import java.util.Scanner;
     
    public class Break {
        public static void main(String[] args) {
            while (true) {
                System.out.println("Do you want to continue?(Y/N) : ");
                Scanner scanner = new Scanner(System.in);
                String answer = scanner.nextLine();
                if (answer.equals("N"))
                    break;
            }
        }
    }

     

     

    Break는 점프문입니다. 자신이 속한 가장 가까운 바깥쪽 루프(While, for, foreach와 같은 반복문) 또는 Switch문을 종료하는 역할을 합니다. 종료된 문의 뒤에 다른 문이 있는 경우 제어가 해당 문으로 전달됩니다. 좀 더 쉽게 말하면 2중 While문일 때 break를 만나게 되면 자신과 가장 가까운 While문은 종료 시키고 바깥쪽의 While문으로 제어를 전달하게 됩니다. 위의 예제에서는 사용자의 입력에 따라 문을 종료할지 판단하게 됩니다.

     

    Switch에서 사용하는 방법은 다음과 같습니다.

    ※ Switch문에서는 continue를 사용할 수 없습니다.

    package JavaType;
     
    import java.util.Scanner;
     
    public class Switch {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            System.out.println("Enter your selection (1, 2, or 3): ");
            String s = scanner.nextLine();
            int n = Integer.parseInt(s);
            switch (n) {
            case 1:
                System.out.printf("Current value is %d%n", 1);
                break;
            case 2:
                System.out.printf("Current value is %d%n", 2);
                break;
            case 3:
                System.out.printf("Current value is %d%n", 3);
                break;
            default:
                System.out.println("Sorry, invalid selection.");
                break;
            }
        }
    }

     

     

    2. Continue.

    Continue문은 해당 문이 포함된 바깥쪽 반복문의 다음 반복으로 제어를 전달합니다. 아래 예제를 보면 쉽게 이해할 수 있습니다. 짝수는 건너뛰고 홀수만 Console창에 찍어줍니다.

    package JavaType;
     
    public class Continue {
        public static void main(String[] args) {
            for (int i = 0; i < 10; i++) {
                if ((i % 2) == 0)
                    continue;
                System.out.printf("%d : Odd%n", i);
            }
        }
    }

     

     

    아래는 결과 화면입니다.

    yqEhkGp.png

     

     

    3. Goto. (continue label, break label)

    Java는 C나 C#과는 다르게 Goto문을 제공하지 않고 있습니다. 그렇다고해서 레이블이 정의된 위치로 제어를 전달하지 못하는 것은 아닙니다. Goto문처럼 자유롭지는 않지만 비슷하게 구현할수는 있습니다. 만약, C나 C++에서 자바로 넘어오게되면 이 부분에서 이해하기가 약간 어려울수도 있습니다.

     

    아래는 특정 조건에 부합할 때 중첩된 루프에서 벗어나기 위한 예제입니다. break label의 경우 goto와 같이 중첩된 반복문을 탈출할 수 있습니다. 하지만 continue label은 레이블이 위치한 반복문에게 제어를 넘기는 역할을 합니다.

    package JavaType;
     
    import java.util.Scanner;
     
    public class Goto {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            System.out.println("종료 조건(숫자)을 입력하세요 :");
            
            String input = scanner.nextLine();
            
            int input_number = Integer.parseInt(input);
            int exit_number = 0;
            
            EXIT_FOR: JUMP_FOR: for (int i = 0; i < 5; i++) {
            
                for (int j = 0; j < 5; j++) {
                    for (int k = 0; k < 5; k++) {
                        exit_number++;
                        
                        if (exit_number % 2 == 0)
                            continue JUMP_FOR;
                        
                        if (exit_number == input_number)
                            break EXIT_FOR;
                        
                        System.out.println(exit_number);
                    }
                }
            }
            
            System.out.println("\nExit nested for...");
        }
    }

     

     

    위 코드를 실행해보면 아래와 같은 결과를 얻을 수 있습니다.

    ZG1oShl.png

     

     

    4. Return.

    점프문의 마지막인 return입니다. return문은 자신이 속한 메소드의 실행을 종료하고 호출한 메소드로 제어를 반환합니다. 선택적 값을 반환할수도 있습니다. void형식(반환값이 없는)의 메소드인 경우 return문을 생략할 수 있습니다.

    package JavaType;
     
    public class Return {
        public static double CalculateArea(int r) {
            double area = r * r * Math.PI;
            return area;
        }
     
        public static void main(String[] args) {
            int radius = 5;
            double result = CalculateArea(radius);
            System.out.printf("The area is %.2f%n", result);
        }
    }

     

     

    위의 결과는 반지름으로 입력받은 값의 원둘레를 구하는 공식입니다. 꼭 알고 넘어가야 할 내용이 하나 있습니다. 우리가 의례 사용하고 있는 try~catch~finally구문에서 점프문은 선택적 finally를 벗어날 수 없다는 것입니다. 여기에서는 간단하게 점프문은 finally를 벗어날 수 없다는 것만 외우고, 실제 try~catch에 대해서 알아볼 때 좀 더 자세히 다루도록 하겠습니다.

    bSv03ke.jpg

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

    댓글목록

    등록된 댓글이 없습니다.