Programming/JAVA

제어문이란?

잇나우 2020. 12. 29. 01:24
반응형

제어문

코드가 위에서 아래로 순차적으로 실행되는 구문을 순차문이라고 한다. 모든 코드가 순차적으로 실행된다면 좋겠지만 실제로는 그렇지 않다. 제어문은 코드의 실행 흐름을 담당하는 (flow control) 구문으로 제어문은 선택문, 반복문, 분기문으로 나뉜다.

선택문

선택문 혹은 조건문이라고도 한다. 조건식같은 분기로 나누어 결과에 따라 다른 코드를 실행할 수 있게 해주는 구문이다.

  • if 문
    if문 안에 있는 조건식이 참일 경우 {}안에 있는 코드가 실행된다. 조건식엔 참, 거짓의 boolean타입만 들어갈 수 있다.

      if (조건식) {            
          System.out.println("true")     // {} 안에 코드가 1줄일 경우 {} 생략 가능
      }
  • if else 문
    if문 안에 있는 조건식이 참일 경우엔 if문{}안에 있는 코드가 실행되고, 조건식이 만족되지 않으면 else {} 안에 코드가 실행된다.

      if( 조건식) {
          조건식이 참일경우 이곳의 코드가 실행된다.
      } else {
          위 조건식이 거짓일 경우 이곳의 코드가 실행된다.    
      }

    조건식이 하나만 존재할 수도 있지만 조건식이 여러개 존재할 수도 있다. 모든 조건식이 만족하지 않을때 제일 하단에 else {}안에 코드가 실행된다. else를 생략할 수도 있다.

      if (조건식1) {
          조건식1이 참이면 이곳이 실행된다.
      } else if (조건식2) {
          조건식2가 참이면 이곳이 실행된다.
      } else if (조건식3) {
          조건식3이 참이면 이곳이 싫행된다.
      } else {
          모든 조건식이 거짓일 경우 이곳이 실행된다.
      }

    조건식1부터 참인지 거짓인지 판별하고 참일 경우 조건식1의 {} 안의 코드를 실행 후 if문을 빠져나온다. 만약 거짓일 경우엔 조건식2를 판별하고 참이면 조건식2의 코드를 실행, 거짓이면 조건식3... 순차적으로 참과 거짓인지를 판단하고 모든 조건식이 거짓일 경우 else문이 실행된다.

  • Switch 문
    여러가지 분기를 만들 수 있다는 점에서 if else if 문과 유사하지만 if문의 조건식 처럼 boolean타입으로 코드를 다르게 실행하는 것이 아니라 변수의 값에 따라 코드를 실행할 수 있게 제어할 수 있다. if 문보다 간결하고 가독성 좋은 코드를 작성할 수 있는 장점이 있다.

      switch(변수) {
          case 1:
              실행될 코드
              break;
          case 2:
              실행될 코드
              break;
          case 3:
              break;
          case 4:
          case 5:
              실행될 코드
              break;
          default:
              실행될 코드
      }

    변수나 표현식(primitive type, Enum, String, Wrapper 등)을 기준으로 케이스의 값들을 비교하여 코드를 실행한다. 변수에 값이 1이면 case 1에 있는 코드가 실행되고 3이면 case 3에 코드가 실행된다. break;만날 경우 switch문을 빠져 나온다. 만약 break;가 없을경우 다음 case의 코드도 실행해 버리니 주의를 해야한다. 모든 케이스에 해당되는 값이 없다면 default가 실행된다. if문의 else와 같다.

반복문

반복문은 말 그대로 어떤 작업을 반복적으로 수행하고 싶을때 사용하는 구문이다. 조건을 줘서 조건을 만족할 때까지 반복하게 할 수 있어, 내가 원하는 반복횟수만큼 반복을 할 수도, 무한대로 반복을 할 수도 있다.

  • for 문
    설정한 조건이 만족될 때 까지 {}안에 있는 코드가 반복 수행된다. 카운팅 변수를 두어 원하는 횟수만큼 반복시킬 수도 있지만 컬렉션과 같은 자료구조에 저장되어 있는 값들을 순회할 때도 사용할 수 있다. 반복 수행될 코드가 한줄이면 {}를 생략할 수 있다.

      for(초기화식; 조건식; 증감식) {
          반복수행될 코드
      }

    JDK 5.0 이상부터는 배열, 컬렉션등에 향상된 for문을 사용할 수 있다.

      for(타입 변수명 : 컬렉션) {
          System.out.println(변수명);
      }
    
      // arrow를 사용하는 forEach함수
      names.forEach( name -> {
          System.out.println(name);
      });

    for문을 활용하기 위해서는 알아두면 좋은 중요한 점들이 있다.

    1. 초기화식, 조건식, 증감식이 무조건 있어야할 필요는 없다.

    2. 초기화식, 조건식, 증감식을 얼마든지 확장해서 구현할 수 있다.

    3. 증감문에 반드시 ++-- 같은 증감 연산자를 사용할 필요 없다.

    4. 조건문에 사용하는 변수가 있는 경우, 이 변수가 초기화식에서 선언한 변수일 필요는 없다.

      // 초기화식에서 카운팅 변수를 선언할 필요는 없다.
      int i;
      for(i = 10; i <= 100; i += 10) {
       System.out.println(i);
      }
      // 바깥에서 i를 계속 사용할수도 있다.
      
      // 초기화식에 변수가 하나일 필요는 없다.
      // 증감식에 변수가 하나일 필요는 없다.
      for (int i = 0, j = 10; i != j; ++i, --j) {
       System.out.println(i + " " + j);
      }
      
      // 초기화식을 생략할 수도 있다.
      // 초기화식에 세미콜론은 생략하면 안된다!!
      int i = 0, j = 10;
      for (; i != j;) {
       System.out.println(i + " " + j);
       ++i;
       --j;
      }
  • while 문
    while문의 조건식이 참일 경우 {}안의 코드가 반복 수행된다.

      while(조간식) {
          조건식이 참일 경우 반복수행될 코드
      }

    for문과는 다르게 조건식을 공백으로 둘수는 없다. 하지만 for문과 마찬가지로 무한으로 반복하게 만들 수 있다.

      for (; ;) {
          무한 반복
      }
    
      while (true) {
          무한 반복
      }
  • do while 문
    while문이 조건식을 먼저 판별하고 코드를 수행했다면 do while문은 코드블럭을 한번 수행한뒤 조건을 판별한다.

      do {
          한 번 실행된후 조건식이 참일 경우 반복수행될 코드
      } while (조건식);

    분기문

    선택문과 반복문에서 중간 흐름을 바꿀 수 있는 구문

  • break 문
    break문은 두가지로 나뉜다. 라벨링이 된것과 안된것.

    • 라벨링이 되지 않은 break
      switch문, 반복문에서 사용할 수 있으며, break문에서 가장 가까운 제어문을 빠져나온다.
    • 라벨링이 된 break
      똑같이 제어문을 끝내지만, 해당 라벨이 붙은 제어문이 종료 된다.
        name:
        for(int i = 0; i < 100; i++) {
            for (int j = 0; j < 100; j++) {
                if ( i == 5 ) {
                    break name;
                }
            }
        }
      name: 안에 있는 두개의 for문 모두가 종료된다.
  • continue 문
    continue문은 반복문 안에서 사용되며, 해당 반복을 건너뛴다. continue는 종료가 아니다. 반복 뛸 뿐 그 다음 반복은 다시 진행된다. break문과 같이 라벨이 존재하는 경우와 아닌 경우가 있고 사용방법 또한 동일하다.

    // i가 5일때 continue 밑에있는 코드를 건너뛰고 i++로 i의 값이 증가된 값으로 반복문이 진행된다.
    for(int i = 0; i <= 10) i++){
    if (i == 5) {
      continue;
    }
    System.out.println(i);
    }
    // i가 5일때 name:의 가장 바깥 for문 끝으로 건너뛴다.
          name:
          for(int i = 0; i < 100; i++) {
              for (int j = 0; j < 100; j++) {
                  if ( i == 5 ) {
                      continue name;
                  }
              }
          }
    • return
      현재 메소드를 종료시키고 해당 메소드를 호출한 위치로 돌아간다. 메소드 반환타입에 의해 뒤에 반환타입의 값이 올수도 있고 없을 수도 있다.
      public void test(int num) {
      if (num == 5) {
       return;
      }
      }
      // 메서드에 반환타입이 있는 경우 반환타입의 값을 리턴해주어야 한다.
      public int test2(int num) {
      if (num == 10) {
       return 10;
      }
      return 5;
      }

참고
https://github.com/jongnan/Java_Study_With_Whiteship/blob/master/week4/week4.md
https://ahnyezi.github.io/java/javastudy4-flowcontrol/
https://blog.naver.com/hsm622/222159930944

반응형

'Programming > JAVA' 카테고리의 다른 글

클래스란?  (0) 2021.01.04
JUnit이란?  (0) 2020.12.31
연산자란?  (0) 2020.12.22
데이터 타입, 변수, 배열 그리고 타입추론  (0) 2020.12.21
JVM이란?  (0) 2020.12.21