티스토리 뷰

Java/기본

027. 자바 : 제어문

따강아지 2022. 3. 14. 23:01

제어문은 프로그램에서 프로그램의 순서를 변경하는 것입니다. 즉 순차적으로 하나씩 실행하던 것을 조건에 따라서 다른 것을 실행할 때 사용합니다. 제어문은 다음과 같은 종류가 있습니다.

  • 선택 제어문 : if , switch
  • 반복 제어문 : for, while, do.. while
  • 제어 키워드 : break, continue
제어문 문장 기능
if
If 
if – else
If – else if – else
주어진 조건에 따라서 실행문의 실행 여부 결정
switch
switch (위치변수) {
   case
1:
      …..
   case
n:
      …..
   default :
      …..
  }
위치변수의 값에 따라서 특정위치(case)의 실행문 실행
for
for ( 초기값 ; 종료조건 ; 증감 )
반복 횟수를 정해 놓고 반복 실행
while
while (조건) { ….. }
조건이 만족 할 때 까지 반복 실행
do .. while
do { …..  } while (조건)
한번 실행 후 조건이 만족하면 반복 실행

제어 키워드 기능
break
제어문 탈출
continue
반복 실행 중 건너 뛰기

1. if 문

특정 조건에 따라서 실행문을 실행합니다.


​1. if ( 조건식 ) 실행문 A
조건식이 만족하면 실행문(명령문 A)을 실행하고 만족하지 않으면 명령문 C를 실행하는 구문으로 조조 건에 관계없이 명령문 C를 실행하고 싶을 때 사용합니다.


 

 


2. if ( 조건식 ) {
      명령문 A;
    } else  {
      명령문 B;
    }
    명령문 C;

  - 명령문을 실행 후 조건이 참인 경우(명령문 A)와 거짓인 경우(명령문 B) 각각 다른 실행문(명령문)을 실행하고 명령문 C를 실행하고자 할 때 사용합니다.

 


3. If ( 조건식 )  {  
     명령문 A;
   }  else If ( 조건식 )  {   
     명령문 B;
   }  else {    
     명령문 C;
   }
   명령문 D

 

 

 


public class ControlIf {
   public static void main(String[] args) {
      int num01 = 10;
      int num02 = 20;
	  
      if ( num01 < num02 )  { // num01 이 num02 보다 작으면 
         System.out.println(String.format("if :: %s < %s 는 만족 합니다.", num01, num02));
      }

      if ( num01 < num02 )  { // 조건이 만족 하면 
         System.out.println(String.format("if - else :: %s < %s 는 만족 합니다.", num01, num02));
      } else { // 조건이 만족 하지 않으면
         System.out.println(String.format("if - else :: %s < %s 는 불만족 합니다.", num01, num02));
      }

	  
      int score = 88;
      if ( score < 80 )  {
         System.out.println(String.format(" ⓐ if - else if - else  :: %s 는 80이하 입니다.", score));
      } else if ( score >= 80 && score < 90 )  {
         System.out.println(String.format(" ⓑ if - else if - else  :: %s 는 80이상 90이하 입니다.", score));
      } else if ( score >= 90 && score < 100 )  {
         System.out.println(String.format(" ⓒ if - else if - else  :: %s 는 90이상 1000이하 입니다.", score));
      } else if (  score == 100 )  {
         System.out.println(String.format(" ⓓ if - else if - else  :: %s 는 100 입니다.", score));
      } else {
         System.out.println(String.format(" ⓔ if - else if - else  :: %s 는 잘못 입력된 점수 입니다.", score));
      }
   }
}

- 변수 score가 80보다 작으면 ⓐ가 실행되고 80과 90 사이면 ⓑ, 90부터 99까지이면 ⓒ, 100이면 ⓓ, 조건에 모두 만족하지 않으면 ⓔ를 실행합니다.


2 switch

. 변숫값에 따라서 특정 명령문을 실행합니다.
. break를 사용해서 switch를 탈출합니다.
. case 블록에 break를 사용하지 않으면 다음 case의 값을 검사합니다. 프로그램에서 의도적으로 해야 하는 경우는 제외하고는 break를 사용해야 합니다.

 

 

 


public class ControlSwitch {
   public static void main(String[] args) {
      int num = 2;
      switch(num) {
         case 0:
         case 1:
         case 2:
            System.out.println(" ⓐ 인위적을 1,2,3 수용");
            break;
         case 3:
            System.out.println(" ⓑ num = 3");
            break;
         case 4:
            System.out.println("num = 4");
            break;
         case 5:
            System.out.println("num = 5");
            break;
         default:
            System.out.println(" ⓒ num가 5 보다 큽니다.");
      }
   }
}

num 0, 1, 2 이면 ⓐ가 실행되고 switch문을 벗어납니다. 이런 코드는 일반적인 코드가 아니고 프로그래머의 의도적으로 사용한 것입니다. 일반적으로 switch는 case의 상수가 맞으면 해당 블록 ( 예 : ⓑ )를 실행하고 switch문을 벗어나야 합니다. 만약 변수 num 이 3이고 case 3 블록에서 break가 없으면 ⓑ가 실행되고 default의 ⓒ 까지 실행되어 프로그램의 의도에 벗어난 결과가 나올 수 있으므로 주의를 해야 합니다.


3. for

반복 횟수를 정해놓고 실행 구문을 반복할 때 사용합니다. 반복문을 벗어나기 위해서는 break문을 사용해서 for 블록을 벗어납니다. 만약 중첩 for문이면 break는 사용한 for 블록을 벗어납니다.

  • for ( 초기값 ; 조건식; 증감식 )
  • for ( type 요소 : Object ) : foreach
public class ControlFor {
   public static void main(String[] args) {
      int index ;
      int num = 0;
      System.out.println("==== ⓐ for 문 안에서 후위형 증감");
      for ( index = 0; index < 5; index++) {
         num = ++num;
         System.out.println(String.format("i : %s , num : %s", index, num));
      }
      
      System.out.println("==== ⓑ for 문 안에서 전위형 증감");
      num = 0;
      for ( int i = 0; i < 5; i++) {
         num = num++;
         System.out.println(String.format("i : %s , num : %s", i, num));
      }
      
      System.out.println("==== ⓒ 문자열 한 단어 씩 출력");
      String str = new String("자바 언어");
      for ( int i = 0; i < str.length(); i++) {
         System.out.println(String.format("i : %s , num : %s", i, str.charAt(i)));
      }

      System.out.println("==== ⓓ 문자열 한 단어 씩 출력 ( foreach ) ");
      char[] chstr = str.toCharArray();  // 문자열을 문자 배열로 변환
      for ( char c : chstr) {
         System.out.println(String.format("c : %s" , c));
      }

   }
}

ⓐ : 변수 index의 범위는 main 함수 내에서 유효하므로 다른 for 문안에서 사용 불가 
-> for 문은 블록 범위 이므로 index는 for 문에서 선언하는 것이 좋습니다.
    for ( int index = 0; index < 5;  i++) { … )


ⓑ : 후위 증감 연산자를 사용하였으므로 언제나 0입니다. 주의하여야 합니다.

 


ⓒ : String은 forEach 사용 불가합니다.
     문자 하나씩 얻기 위해서 charAt 사용합니다.

 


ⓓ : 문자열을 한 단어 씩 처리하기 위해서는 문자 배열로 변환 ( toCharArray() )합니다. 참조형 ( Object )는 forEach 사용하는 것이 좋습니다. 모든 형을 사용할 수 있습니다.


4. while

조건식이 참인 동안 중괄호 안의 실행문을 실행합니다. 조건이 맞지 않으면 한 번도 실행이 되지 않을 수 있습니다.
또한 조건식을 잘못 사용하면 무한 루프 처리될 수 있으므로 주의가 필요합니다.

  • while(조건식) { 실행문 }
public class ControlWhile {
   public static void main(String[] args) {
      int num = 0;
      System.out.println(String.format("시작 : num : %s", num));
      // ⓐ
      while ( num < 5) {
         num = ++num;
         System.out.println(String.format("num : %s", num));
      }
      System.out.println(String.format("종료 : num : %s", num));
      
      // ⓑ
      while ( num < 10) {
         num = ++num;
         if ( num == 8 ) {
            System.out.println(String.format("beak 탈출 num : %s", num));
            break;
         }
         System.out.println(String.format("num : %s", num));
      }
      System.out.println(String.format("종료 : num : %s", num));
   }
}

ⓐ : 전위 증감을 사용하여서 num이 5이면 while문을 벗어나게 됩니다.
   - 후위 증감을 사용하면 무한 루프에 빠지게 됩니다. (주의 필요 )

 

 


ⓑ : num이 8과 같으며 break문으로 탈출합니다.

 


5. do.. while

한번 실행 후 while의 조건식이 만족하지 않으면 탈출합니다. 무조건 한번 실행하며, 무한 루프 처리될 수 있으므로 주의가 필요합니다. break문을 사용해서 탈출하는 로직을 만들어야 합니다.

  • do { 실행문 } while(조건식)
public class ControlDoWhile {
   public static void main(String[] args) {
      int num = 0;
      System.out.println(String.format("시작 : num : %s", num));
      // ⓐ
      do {
         num = ++num;
         System.out.println(String.format("num : %s", num));
      } while ( num < 1);
      System.out.println(String.format("종료 : num : %s", num));

      // ⓑ
      do {
         num = ++num;
         System.out.println(String.format("num : %s", num));
      } while ( num < 5);
      System.out.println(String.format("종료 : num : %s", num));

      // ⓒ
      do {
         num = ++num;
         if (num == 8) {
            System.out.println(String.format("탈출 num : %s", num));
            break;
         }
         System.out.println(String.format("num : %s", num));
      } while ( num < 10);
      System.out.println(String.format("탈출 종료 : num : %s", num));
   }
}

ⓐ : 무조건 한번 실행

 


ⓑ : num을 1씩 증가하다가 조건 만족 ( num < 5 )이면 while문을 벗어납니다.

 

 


ⓒ : num 이 8이면 break문을 만나서 while문을 벗어납니다.

 


6. break, continue   

  • break : 반복문 탈출 -> 중첩인 경우 실행 중인 반복문 탈출
  • continue : 다시 반복문 실행
public class ControlBreakContinue {
   public static void main(String[] args) {
      int num = 0;
      for (int x = 0; x < 5; x++) {
         if (x == 4) {
            System.out.println(String.format("스킵 x : %s ,  num : %s", x, num));
            continue;
         }
         
         for (int y = 0; y < 5; y++) {
            num = ++num;
            if (y == 3) {
               System.out.println(String.format("탈출 x : %s , y : %s,  num : %s", x, y, num));
               break;
            }
            System.out.println(String.format("x : %s , y : %s,  num : %s", x, y, num));
         }
      }
   }
}

결과 

 

 

 

 

 

 


소스 : https://github.com/hyomee/JAVA_EDU/tree/main/Control

 

GitHub - hyomee/JAVA_EDU: 자바 기초 교육

자바 기초 교육. Contribute to hyomee/JAVA_EDU development by creating an account on GitHub.

github.com

 

'Java > 기본' 카테고리의 다른 글

029. 클래스 ( Class )  (0) 2022.05.11
028. 객체 지향 프로그램 ( OOPL )  (0) 2022.05.09
026. 자바 : instance 연산자  (0) 2022.03.06
025. 자바 : 삼항연산자  (0) 2022.03.06
024. 자바 : 논리 연산자  (0) 2022.03.06