ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [스터디 4주차] JAVA 제어문
    프로그래밍 언어/JAVA 2021. 6. 6. 14:24

     

    더보기

    목표: 자바가 제공하는 제어문 학습

     

    1. 선택문

    선택문을 알아보기 전에 제어문이 무엇을 말하는지 알아보자.

    제어문이라는 단어의 의미를 생각해보면 java에서 무언가를 제어할 수 있는 문장인 것 같은데 무엇을 제어하는 것일까?

    제어문은 java 프로그램의 흐름을 제어하는 것이다.

    우리가 java코드를 구현했으면 보았을 부분인데 public static main(String[] args) { }가 있고 우리가 구현하고 싶은 내용을 { }안에 쓰게된다.

    그러면 java프로그램을 시작하면 main() 메소드의 중괄호 안에 있는 코드가 위에서 아래로 순서대로 실행하는 흐름을 가지게 된다.

    이러한 실행 흐름을 개발자가 원하는 방향으로 바꿀 수 있도록 해주는 것이 제어문이다.

    제어문의 종류 중 하나인 선택문에 대해 알아보자.

    먼저, 선택문 중 if문에 대해 알아보자.

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

    if문의 형식과 실행 흐름을 아래의 그림을 보며 이해해보자.

    조건식에는 true나 false를 반환할 수 있는 연산식이나 boolean 변수가 올 수 있다.

     

    다음으로 if-else문이다.위에서 말한 if문과 함께 else블록을 사용하여 조건식의 결과에 따라 실행 블록이 달라진다.if문의 조건이 참이면 if문의 블록({ } 안에있는 코드)이 실행되고 조건식이 거짓이면 else 블록이 실행된다.if-else문의 형식과 실행흐름을 보면 아래와 같다.

    이외에도 조건문이 여러 개인 if문이 있다.

    처음 if문의 조건식이 거짓이면 다른 조건식의 결과에 따라 실행 블록을 결정하도록 할 수 있는데 if 블록의 끝에 else if문을 붙이면 된다.

    else if문의 수는 제한이 없으며 여러 개의 조건식 중 참이 되는 블록만 실행하고 전체 if문을 벗어난다.

    이것은 그림으로 실행흐름을 보여주면 복잡하므로 예제를 통해 보도록하자.

    public class IfElseIf {
        public static void main(String [] args) {
            int point = 75;
            
            if (point >=90) {
              System.out.println("플래티넘 고객입니다.");
            } else if (point >=80) {
              System.out.println("골드 고객입니다.");
            } else if (point >=70) {
              System.out.println("실버 고객입니다.");
            } else if (point >=60) {
              System.out.println("브론즈 고객입니다.");
            } else {
              Sysyem.out.println("일반 고객입니다.");
            }
            
            System.out.println("고객님.반갑습니다.");
        }
    }

    예시를 보면 point라는 변수 75를 초기화했다.

    if문을 보면 point가 90이상인지 물어보는 조건식이 있고 거짓이므로 블록을 실행하지 않고 다음으로 넘어간다.

    else if로 point가 80이상인지 물어보는 다른 조건식이 있고 거짓이므로 블록을 실행하지 않고 다음으로 넘어간다.

    else if로 point가 70이상인지 물어보는 다른 조건식이 있고 참이므로 블록을 실행하여

    실버 고객입니다라는 문장을 출력한다.

    조건이 참으로 블록을 실행하였으므로 이제 전체 if문을 빠져나오게 되고 if문 밖에 있는 코드가 실행되어

    고객님.반갑습니다.라는 문장을 출력한다.

     

    다음으로 선택문 중 하나인 switch문에 대해 알아보자.

    switch문은 if문처럼 주어진 조건식을 통해 참인지 거짓인지에 따라 실행 블록이 결정되는 것이 아닌 변수가 어떠한 값을 갖느냐에 따라 실행문이 선택된다.

    실습코드를 통해 무슨 말인지 이해해보자.

    public class Switch {
      public static void main(String[] args) {
        int num = (int)(Math.random()*4) + 1;
        
        switch(num) {
          case 1:
            System.out.println("1번입니다.");
            break;
          case 2:
            System.out.println("2번입니다.");
            break;  
          case 3:
            System.out.println("3번입니다.");
            break;
          defalut:
            System.out.println("4번입니다.");
            break;
        }
      }
    }

    num에는 1~4까지의 숫자 중 랜덤으로 하나의 값이 저장된다.

    이제 switch문은 num의 값이 무엇인지에 따라 동일한 값을 갖는 case의 실행문을 실행한다.

    만약에 num이 3이 나왔다고 생각해보자.

    첫번째로 case 1은 동일하지 않으므로 넘어가고 case 2도 동일하지 않으므로 넘어간다.

    case 3는 동일하므로 3번입니다.를 출력한다.

    여기서 case마다 끝에 break가 있는데 왜 중복적으로 쓴 것일까?

    break가 붙은 이유는 다음 case를 실행하지 말고 switch문을 빠져나가기 위해서이다.

    만약에 break가 없다면 다음 case가 값과 상관없이 실행된다.

    예를 들어, case에 break가 없고 num이 2가 나왔다고 생각해보자.

    그러면 2번입니다. 3번입니다. 4번입니다.가 전부 출력된다는 것이다.

     

    자바 6까지는 switch문의 괄호에는 정수 타입(byte, char, short, int, long)이나 정수값을 산출하는 연산식만 올 수 있었다.

    하지만 자바 7부터 괄호에 String(문자열 타입)타입의 변수도 올 수 있게 되었다.

     

     

     

    2. 반복문

    반복문은 우리가 작성한 코드를 반복적으로 실행되도록 할 때 사용되며 for문, while문, do-while문이 있다.

    보통의 경우, for문은 내가 반복하고 싶은 횟수가 정해져 있을 때 사용하고 while문은 조건에 따라 반복을 계속할지 말지를 정하고 싶을 때 사용한다.

     

    먼저, for문에 대해 알아보자.

    for문을 쓰지않고 동일한 실행문을 작성한 경우를 살펴보면 1~5까지의 합을 코드로 구현한 것을 보자.

    int ans = 1;
    
    ans = ans + 2;
    ans = ans + 3;
    ans = ans + 4;
    ans = ans + 5;
    
    System.out.println(ans);

    이렇게 코드를 짜야하고 만약 1~100까지의 합을 구하려고하면 코드의 양을 더 많아진다.

    우리는 ans에 1씩 늘어나며 계속해서 더해주는 반복적인 작업이 이루어진다는 것을 알 수 있고 이를 for문을 통해 코드의 양을 줄일 수 있다.

    int ans = 0;
    
    for (int i =1; i<=5; i++) {
      ans = ans + i
    }
    
    Sysyem.out.println(ans);

    for문의 형식을 살펴보면 괄호( )안에 3가지의 식이 존재한다.

    먼저, int i = 1은 초기화식으로 조건식이나 for문 안에서 사용할 변수를 초기화 해준다.

    다음으로 i<=5는 조건식으로 for문을 언제까지 반복할 것인지 정해주는 것으로 조건이 참 일때까지만 반복한다.

    마지막으로 i++는 증감식으로 초기화식에서 선언한 변수를 증가시키거나 감소킬 수 있다.

    실행 흐름을 살펴보면

    먼저, 초기화식이 실행되고 조건식을 보고 참인지 거짓인지 확인한다.

    참이면 블록 안의 코드를 실행하고 거짓이면 for문 블록을 실행하지 않고 나오게 된다.

    조건이 참이여서 블록 안의 코드를 전부 실행했으면 증감식을 실행하고 다시 조건식을 보며 판단한다.

    이렇게 반복적인 작업이 이루어지게 된다.

     

    다음으로 while문에 대해 알아보자.

    while문은 조건식을 작성하여 조건식이 참일 경우에 계속해서 정해진 코드를 반복해서 실행한다.

    조건식이 거짓이면 반복을 멈추고 while문을 종료한다.

    조건식에는 boolean 변수나 true, false를 반환하는 연산식이 올 수 있고 만약에 조건식에 true를 넣게 되면

    조건식이 참일 경우에 계속해서 반복한다고 했으므로 무한 루프를 형성하게 된다.

    while문을 사용한 예제를 보며 어떻게 동작하는지 알아보자.

    public class WhileExample {
      public static void main(String[] args){
        int ans = 0;
        
        int i = 1;
        
        while(i<=5) {
          ans = ans + 1;
          i++
        }
        
        System.out.println(ans);
      }
    }

    조건식을 보면 i가 5보다 작거나 같은지 묻고 있다.

    i는 1이므로 while문 안에 있는 코드를 실행하고 i가 6이 되면 조건식이 거짓이 되므로 반복을 멈춘다.

    결과는 ans에 1부터 5까지 합한 값이 출력된다.

     

    마지막으로 do-while문을 알아보자.

    위에서 알아본 while문은 먼저 조건식을 보고 참인지 거짓인지 판단하여 반복할지 말지를 정한다.

    do-while문은 while문과 달리 먼저 반복하고 싶은 실행문을 수행 후 조건식이 참인지 거짓인지 판단하여 계속 반복할 것인지 말지를 결정한다.

    do-while문의 형식과 실행 흐름을 보면 아래의 그림과 같다.

     

    댓글

Designed by Tistory.