ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java]STEP1 - 4) 조건문(if, switch)과 반복문(for, while, do-while), break와 continue에 대하여
    개발 공부/Java 2020. 9. 5. 00:39

    본 게시글은 도서 "이것이 자바다" 동영상 강의를 듣고 기록하는 TIL(Today I Learned) 입니다.
    모든 저작권은 출판사 한빛미디어와 신용권님께 있음을 알립니다.👍

     

     

    프로그램의 실행 흐름은 main 함수의 중괄호의 시작( { )에서 부터 중괄호의 끝( } )으로 순차적으로 행해진다.

    하지만 개발자는 이러한 실행 흐름을 원하는 대로 바꾸거나 임의적으로 조정해야하는 상황이 자주있다.

    따라서 이를 위해 조건문과 반복문을 사용하게 되었다. 아래에서 좀 더 알아보자.

     

     

    1. 조건문(if, switch)


    조건문조건식을 만족하는지 만족하지 않는지에 따라서 실행문의 실행 여부가 결정된다.

    즉 쉽게 말해서, 조건식이 참/거짓 상황에 따라서 개발자가 원하는 대로 실행할 수 있다는 말이다.

     

    조건문은 if 문과 switch 문이 존재한다. 차근차근 알아보자.

     

     

    1-1. if 문

    if문은 조건식의 결과에 따라서 블록의 실행 여부가 결정된다.

    조건식에는 true나 false 값을 산출할 수 있는 연산식이나 boolean 변수가 올 수 있다.

    if (grade == 'A') {
          System.out.println("당신의 성적은 A 입니다.");
    }

    여기서 조건식은 괄호 안에 있는 grade == 'A' 이다.
    만약 grade가 A라면, 해당 조건식은 true가 되어 println을 실행한다.
    grade가 B나 C 처럼 A가 아니라면, 해당 조건식은 false가 되어 println을 실행하지 않는다.

     

    if 문에는 중괄호( {} )를 생략할 수 있는데, 이럴 경우에는 딱 한 문장만 올 수 있다.

    if(grade == 'A')
        System.out.println("당신의 성적은 A 입니다.");

    println은 정상적으로 실행된다.

     

    하지만 웬만하면 중괄호를 넣어주는 것이 권장된다. 그 이유는 바로 가독성과 오류방지 때문이다.

    if (grade == 'A')
        System.out.println("당신의 성적은 A 입니다.");
        System.out.println("당신의 점수는 90점 이상입니다.");

    만약 grade가 A인 사람에게만 "성적이 A라는 것과 점수가 90점 이상이라는 것"을 모두 알려주고 싶어서
    위 처럼 코드를 작성했다면, 잘못 작성한 것이다.

    if 다음에 중괄호를 넣어주지 않으면, 오직 한 문장만 if 의 실행문으로 인식이 되므로
    두 번째에 있는 System.out.println("당신의 점수는 90점 이상입니다."); 는
    grade가 A가 아니라 B나 C인 사람에게도 무조건 나타나게된다.

    그래서 올바르게 고치면 다음과 같다.

    if (grade == 'A') {
        System.out.println("당신의 성적은 A 입니다.");
        System.out.println("당신의 점수는 90점 이상입니다.");
    }

     

    또한 if 문은 else if나 else와 함께 사용하여 예외의 상황도 만들 수 있다.

    if (grade == 'A') {
        System.out.println("당신의 성적은 A 입니다.");
    } else if (grade == 'B') {
        System.out.println("당신의 성적은 B 입니다.");
    } else if (grade == 'C') {    
        System.out.println("당신의 성적은 C 입니다.");
    } else {
          System.out.println("당신의 성적은 산정 불가 등급 입니다.");
    }

    grade가 A, B, C, 그외 일때 각각에 맞게 실행하기 위하여 else if와 else가 사용되었다.

    맨위 if 부터 아래로 순차적으로 실행되면서 조건에 맞는 순간에 해당 실행문을 실행한다.
    else는 if와 else if 중 어떠한 조건식도 만족시키지 못했을 때 실행된다.

     

    if문은 서로 중첩해서 사용할 수도 있다.

    if (grade == 'A') {
        System.out.println("당신의 성적은 A 입니다.");
        
        if (score >= 98) {
              System.out.println("추가적으로, 당신은 상위 1% 입니다.");
        }


    말 그대로 if문 안에 또다른 if문을 삽입하여 여러가지 상황을 만들 수 있다.

    위 예시는 grade를 A 받은 학생이 점수도 98점 이상이라면, "상위 1% 입니다." 라는 문구가 뜨게 하였다.
    만약 grade는 A이지만 98점 미만이라면, "성적은 A 입니다." 라는 문구만 뜨고, 상위 1% 문구는 뜨지 않는다.

     

     

     

     

    1-2. switch 문

    switch문은 if와 마찬가지로 조건식에 따라 프로그램의 실행 흐름을 제어하는 조건문이다.

     

    하지만 if문은 조건식이 true/false냐에 따라 실행O/실행X 라는 두 가지 결과만 통제할 수 있었는데,

    switch문은 변수가 어떤 값을 갖느냐에 따라서 실행되는 결과를 각각 따로 통제할 수 있다.

    switch (number) {
        case 1:
           System.out.println("1번입니다.");
           break;
        case 2:
          System.out.println("2번입니다.");
          break;
        case 3:
          System.out.println("3번입니다.");
          break;
        case 4:
          System.out.println("4번입니다.");
          break;
        default:
          System.out.println("범위 이외의 숫자 입니다.");
          break;
    }

    number라는 변수의 값에 따라 각각의 case가 실행된다.
    number가 1, 2, 3, 4 중 어떤 것이냐에 따라서 case1, 2, 3, 4 가 실행되는 것이다.
    만약 number가 1, 2, 3, 4 이외의 다른 값이라면 default로 처리된다.

    break가 있는 이유는 해당 case의 실행문을 실행하고나서 빠져나가기 위함이다.
    만약 break가 없다면 다음 case 부터 순차적으로 실행하고 switch문을 빠져나올 것이다.

    switch문의 변수에는 정수형(byte, char, short, int, long)문자열(String) 그리고 연산식이 올 수 있다.

     


     

    2. 반복문(for, while, do-while)


     

    반복문은 어떤 코드(실행)들을 반복적으로 실행하고 싶을 때 사용한다.

    반복문은 for와 while 그리고 do-while이 존재한다.

     

    for문은 반복 횟수를 알고 있을 때 주로 사용한다.

    while문은 조건에 따라 반복할 때 주로 사용한다.

    do-while문은 일단 반복문 안에 있는 코드(실행)을 무조건 1번은 실행하고 나서 반복하기 위해 사용한다.

     

     

    2-1. for 문

    for (int i = 0; i < 10; i++) {
        System.out.println("현재 숫자: " + i);
    }

    for문은 반복 횟수를 알고 있을 때 사용되기 때문에, 초기화식과 그에 따른 조건식이 주어진다.
    위에 있는 코드는 i가 0부터 10미만까지 반복하는 것으로, 총 10번의 Loop를 돌게 된다.

    int i = 0; 을 초기화식 / i < 10을 조건식 / i++를 증감식 이라고 한다.
    따라서 i가 0부터 10미만일 때까지 반복을 돌며, i는 반복이 끝날 때 마다 +1 씩 된다는 것을 의미한다.

     

    for문의 초기화식에서 i를 선언할 때, 부동소수점(float, double)을 사용하면 안된다.

    부동소수점(float, double)은 0.1을 근사치로 표현하기 때문에, Loop의 횟수에 심각한 오차가 생길 수 있기 때문이다.

     

    for (int i = 0, j = 1; i <= 10, j <= 12; i++, j--) {
        System.out.println("i는 " + i + "이고 j는 " + j + "입니다.");
    }

    for 문의 초기화식과 증감식은 두 개 이상 올 수 있다.
    이때는 쉼표(,)로 구분해서 작성하면 된다.

     

     

     

    2-2. while 문

    int i = 0;
    while (i  <  10) {
        System.out.println("현재 숫자: " + i);
        i++;
    }

    while문은 조건식이 true일 경우에 계속 반복한다.
    위에 있는 코드는 이전 for문에서 구현한 것과 같은 기능을 한다.

    다만 while의 괄호 안에는 조건식만 들어가고, 초기화식이나 증감식은 직접 따로 써줘야 한다.

    while문은 조건식이 true 일 경우 계속 반복을 하므로, 무한루프 현상이 일어나지 않도록 해야 한다.

    따라서 원하는 만큼 반복을 하고 조건식을 탈출 할 수 있도록 증감식을 이용하거나 break; 를 사용해야한다.

     

     

     

    2-3. do-while 문

    do {
        int inNum = scanner.nextInt();
        System.out.println("입력하신 숫자: " + inNum);
    } while( inNum < 5);

    위에 있는 코드는 5미만의 수를 입력 받았을 때, 입력한 숫자를 출력하는 코드이다.
    단, do-while문이기 때문에, 일단 1번을 실행하고 조건식의 true/false를 따진다.

    기존 while문과의 다른 점이 바로, do-while문은 무조건 1번은 실행하고 조건식을 따진다는 것이다.

    따라서 기존 while문이었다면, 5이상의 수인 7을 입력했을 때, 아무것도 출력되지 않고 반복문이 끝나지만,
    do-while문에서는 일단 "입력하신 숫자: 7" 를 한번 출력하고 반복문이 끝난다.

     


     

    3. break와 continue


     

    반복문을 제어하는 방법으로는 break와 continue 두 가지가 있다.

    이는 반복문의 기능을 더 다양화하여, 개발자가 더 복잡한 기능을 구현할 수 있도록 돕는다.

     

     

    3-1. break

    break는 반복문(for, while, do-while)을 중지시킬 때 사용한다.

    쉽게 말하자면, 반복문이 실행되다가 break;를 만나게 되면 그 즉시 반복문을 탈출한다(종료한다).

    이는 반복문을 반복하다가, 원하는 기능을 모두 수행하여 더이상 실행할 필요가 없을 때 사용한다.

    int i = 0;

    while (true) {
        if (i == 12) {
            System.out.println("종료합니다.");
            break;
        }

        i++;
    }

    위에 있는 코드는 i가 12가 되었을 때, 문장을 출력하고 반복문을 끝내는 코드이다.
    이처럼 반복문을 더이상 실행할 필요가 없을 때, break를 통해서 손쉽게 반복문을 끝낼 수 있다.

     

    break는 해당 break가 속해있는 반복문만 탈출하게 된다.
    만약 반복문이 아래와 같이 중첩되어 있고, 중첩된 반복문 모두를 탈출하고 싶다면,
    이름: while (조건) 이런 식으로 가장 바깥쪽에 있는 반복문 옆에 이름을 지어주면 된다.
    그리고 break 이름; 을 통해서 중첩된 반복문을 탈출할 수 있다.

    loop: while (true) {
        int five = 5;

        for (int i = 0; i < 10; i++) {
            if (i == five) {
                break loop;
            }
        }
    }

    break loop; 을 통해서 안쪽 for문과 바깥쪽 while문 모두를 탈출한다.

     

     

     

    3-2. continue

    continue는 반복문(for, while, do-while)의 실행 중 이후의 문장을 실행하지 않고 다음 반복으로 넘어갈 때 사용한다.

    쉽게 말하자면, 반복문이 진행되다가 continue를 만나면 다음 코드를 무시하고 아예 다음 반복으로 넘어간다.

    for (int i = 1; i < 11; i++) {
        if(i % 2 == 0) {
            continue;
        }

        System.out.println("홀수: " + i);
    }

    위에 있는 코드는 1에서 10까지 자연수 중 홀수만 출력하는 코드이다.
    따라서 if문에서 짝수라고 판별되면, continue를 통해 아래있는 println은 실행하지 않고
    바로 증감식인 i++로 넘어가서 다음 반복으로 이동하게 된다.

     

     

     

    본 게시글은 여기서 마치겠습니다.

    읽어주셔서 감사하고, 혹시나 틀린 부분이나 보완해야할 부분이 있다면 댓글에 남겨주세요~!

     

    댓글

Designed by Tistory.