NGMsoftware

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

    학습


    Java 13. Java 흐름 제어의 선택문. (Flow Control, Selection Statement)

    페이지 정보

    본문

    안녕하세요. 소심비형입니다. 오늘 알아볼 내용은 흐름 제어의 선택문입니다. 말이 좀 어렵긴 한데요. 좀 더 쉽게 이야기 하자면 인생이란 흐름속에 자신이 제어할 수 있는 어떤 선택으로 인해 현재의 내 모습이 결과로 나오게 되는 과정을 말합니다. 여기에서 말하는 선택은 어떤 조건이 주어져야만 할 수 있는 행위들을 말합니다. 소프트웨어도 선택에 의해 처리가 분기되며 이런 연속적인 선택에 의해 결과를 만들어 냅니다.

     

    Java에서 선택문은 특정 조건이 true인지 여부에 따라 프로그램의 제어를 지정된 위치로 옮기는 행위를 말하며, 이러한 행위를 조작할 수 있는 키워드들은 다음과 같습니다.

     

    1. if~else

    if문은 Boolean식의 값을 기준으로 실행할 문을 선택합니다. 다음 예제에서는 사용자가 입력한 조건에 따라 분기를 따라가며 각 분기마다 정해진 메시지를 사용자에게 출력하고 있습니다.

    package JavaType;
     
    import java.util.Scanner;
     
    public class IfElse {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            
            System.out.println("새누리당 1");
            System.out.println("더불어민주당 2");
            System.out.println("정의당 3");
            System.out.println("녹색당 4");
            System.out.println("국민의당 5");
            System.out.println("지지하는 정당을 선택하세요. : ");
            
            String input = scanner.nextLine();
            
            int number = Integer.parseInt(input);
            
            if (number == 1)
                System.out.println("새누리당을 지지하시는군요.");
            else if (number == 2)
                System.out.println("더불어민주당을 지지하시는군요.");
            else if (number == 3)
                System.out.println("정의당을 지지하시는군요.");
            else if (number == 4)
                System.out.println("녹색당을 지지하시는군요.");
            else if (number == 5)
                System.out.println("국민의당을 지지하시는군요.");
            else {
                System.out.println("요즘 그놈이 그놈 같아도 덜 나쁜놈을 뽑아야 합니다.");
                System.out.println("제일 나쁜놈의 지배를 받는것보다 좋아질겁니다.");
            }
        }
    }

     

     

    괄호안의 식이 true(참)가 되면 else는 실행하지 않고 구문을 벗어납니다. 여러개의 조건에 따라 분기하려면 else if와 같이 사용할수도 있습니다. 경우에 따라서는 { }를 사용하여 블록에 문을 포함시켜 여러 문을 중첩해서 조건부로 실행할 수 있습니다.

     

    if와 else if를 사용하면 문의 확장이라 부르며, if { if }문 안에 중첩해서 조건문을 사용하면 중첩문이라고 합니다. 용어의 정의를 알아야 상호 대화에 있어서 상대의 의도를 정확하게 이해하고 받아들일 수 있게됩니다. 그래야 나중에 문제가 발생하지 않게 되겠죠^^;

     

    2. switch~case~default

    switch문은 제어를 본문 내의 case문 중에 하나로 전달하여 다중 선택 및 열거형을 처리하는 제어문입니다. 사실 if~else만 알아도 모든 선택문을 처리할 수 있습니다. 다만, 효율 및 가독성이라는 측면에서 switch는 좋은 성능을 냅니다. 아래의 예제를 통해 자세하게 알아보도록 하겠습니다.

    package JavaType;
     
    import java.util.Scanner;
     
    public class SwitchCaseDefault {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            
            System.out.println("요일을 입력하세요.(일,월,화,수,목,금,토) : ");
            
            String day = scanner.nextLine();
            
            switch (day) {
            case "일":
                System.out.println("Sunday");
                break;
            case "월":
                System.out.println("Monday");
                break;
            case "화":
                System.out.println("Tuesday");
                break;
            case "수":
                System.out.println("Wednesday");
                break;
            case "목":
                System.out.println("Thursday");
                break;
            case "금":
                System.out.println("Friday");
                break;
            case "토":
                System.out.println("Saturday");
                break;
            default:
                System.out.printf("%s는(은) 요일이 아닙니다.", day);
                break;
            }
        }
    }

     

     

    여러분도 한번씩 실행 해보고 결과를 확인해보시기 바랍니다.

    QRFy23Q.png

     

     

    제어는 스위치의 값과 일치하는 case문으로 전달됩니다. 스위치문에 포함할 수 있는 case 인스턴스의 수에는 제한이 없지만 두개의 case문이 같은 값을 가질수는 없습니다. 본문은 선택한 문에서 시작하여 break문이 제어를 case문 밖으로 전달할 때까지 계속 실행됩니다. 추가로, 스위치 값과 일치하는 case식이 없으면 선택적 요소인 default 레이블이 제어를 넘겨받게 됩니다. 만약, defualt가 없다면 스위치문은 종료됩니다. 또한, case문에서 메소드를 종료하려면 break대신 return을 사용할수도 있습니다. 하지만, 가능하다면 break문으로 스위치 제어문을 종료한 후 별도의 조건을 통해서 메소드를 종료하는게 좋습니다.

     

    C#에서는 goto문을 사용할 수 있기 때문에 case에 정의된 레이블로 이동할 수 있습니다. 그리고 공통적으로 break를 생략하므로써 제어를 그룹화 할 수 있게됩니다. 제어를 그룹화 하기 위해서 Java는 case의 순서에 기반하게 됩니다. C#은 goto를 이용하여 순서와 상관없이 그룹화 할 수 있습니다.

     

    C# 흐름 제어의 선택문 보기 ]

     

    qc7oepn.gif

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

    댓글목록

    등록된 댓글이 없습니다.