데이터 과학

제어문 본문

프로그래밍 언어론/JAVA 기초

제어문

티에스윤 2022. 9. 4. 19:40

자바언어에서의 제어문은 일반적인 컴퓨터 언어에서의 제어문과 다르지 않습니다. 

Arraylist에서 나오는for each 구문을 제외하면 같습니다. 파이썬에서는 for문 형식이 조금 다르긴 합니다.

 

제어문이라고 하는 것은 원하는 조건식(conditon), 선택문이나 반복문(loop)을 통해 프로그램을 효과적으로 구성하는 것입니다. 

알고리즘을 만들려고 할 때 반드시 작성해야 하는 부분입니다. 

 

선택문: if, if~else, switch 

반복문: while, do ~ while, for

이동문: break, continue, return

 

조건문인 if 문과 for, while문은 제어문의 3 대장으로 많이 사용되고 있으며, 필수적으로 알아야 하는 알고리즘 형식입니다.

이동문은 알고리즘 구조상 무한루프에 빠지거나 구성에서 오류가 날 경향이 있어 특별한 경우가 있지 않는 한 잘 사용하지 않습니다.

 

 

if 문

 

 

if( condition ) {

    statement; // condition이 참인 경우만 실행합니다. 

}

 

조건(condition)이 거짓(false)이면 결과는 어떻게 될까요. 

구문(statement)만 실행되지 않습니다. 중괄호 {  } 가 있는데 중괄호를 지우면 어떻게 될까요? 

 

다음 예제를 한번 실행해 봅시다. 

 

public class IfPractice {
 public static void main (String args[]) {
    int num;
    num = 20 / 2;
    if(num == 10) 
    System.out.println("참");
    System.out.println("거짓");
 }
 }

 

결과:

거짓

 

 

public class IfPractice {
 public static void main (String args[]) {
    int num;
    num = 20 / 2;
    if(num == 11) 
    System.out.println("참");
    System.out.println("거짓");
 }
 }

 

 

결과:

거짓

 

화면에 거짓이 나타납니다. 중괄호 {   } 를 만들면 어떻게 될까요? 

 

public class IfPractice2 {
 public static void main (String args[]) {
 int num;
 num = 20 / 2;
 if(num == 11) {
 System.out.println("참");
 System.out.println("거짓");
 }
 }
 }

 

 결과: 

 

 

화면에 아무 결과가 안나옵니다. 그 이유는 중괄호를 만들면 조건식인 num==11의 영역이 중괄호 안에 전부 영향력이 있게 됩니다. if 문 안에 { } 이 없으면 명령어 ;까지만 영향력이 있고, { } 가있으면 { } 안에 영향력을 끼칩니다. 

 

 

if ~ else 문

 

조건문을 참과 거짓으로 구분하거나 여러개의 조건 형식을 만들 때 사용하는 if ~ else구문이 있습니다. 

조건식에서 가장 많이 사용하는 방법이며, 여러 알고리즘을 만들때도 거의 필수적으로 사용하는 구문입니다. 

 

if(condition) {
    statement1; // condition이 참일 때 수행
     }
 else {
 statement2; // condition이 거짓일 때 수행 

}

 

조건을 참과 거짓으로 출력할 수 있으며 여러 개의 구문을 통해 알맞은 결과를 만들어 낼 수 있습니다. 

 

public class ifelsepractice {
     public static void main(String[] args) {
        int num=88;
        if (num>=90) {
            System.out.println("A입니다");
        }else if(num>=80) {
            System.out.println("B입니다");
        }else if(num>=70) {
            System.out.println("c입니다");
        }else if(num>=60) {
            System.out.println("D입니다");
        }else {
            System.out.println("F입니다");
        }
    }
}

 

num 값을 88이라고 지정한 후 if문 조건식을 내려가면 num>=80에서 만납니다. 그러면 B입니다라고 출력물이 나오고 프로그램이 끝납니다. 

 

중괄호 {  } 를 삭제하고 난 후의 결과는 어떻게 될까요?

 

public class ifelsepractice2 {
     public static void main(String[] args) {
        int num=88;
        if (num>=90) 
            System.out.println("A입니다");
        else if(num>=80) 
            System.out.println("B입니다");
        else if(num>=70) 
            System.out.println("C입니다");
        else if(num>=60) 
            System.out.println("D입니다");
        else 
            System.out.println("F입니다");
        
    }
}

 

 

그리고, else 구문을 삭제했습니다. 

어떤 결과가 나올지 한번 실행해 봅시다. 

 

public class ifelsepractice {
     public static void main(String[] args) {
        int num=88;
        if (num>=90) 
            System.out.println("A입니다");
        if(num>=80) 
            System.out.println("B입니다");
        if(num>=70) 
            System.out.println("C입니다");
        if(num>=60) 
            System.out.println("D입니다");
        else 
            System.out.println("F입니다");
        
    }
}

 

다른 예제를 하나 살펴보면 아래 예제는 if 문이 2개인데 else 문이 하나입니다. 

else 구문이 어디에 붙는지 한번 생각해 봅시다. 자바언어는 파이썬 처럼 제어문들 안에 들여쓰기(indentation)를 하지 않습니다. 그렇기 때문에 생기는 가독성 문제가 있습니다. 

 

 

public class IfPractice2 {
 public static void main (String args[]) {
 int num;
 num = 20 / 2;
   if(num == 11)  //...1번
     System.out.println("1번");
    if(num == 10) //... 2번
      System.out.println("2번");
   else System.out.println("3번");
 
 }
 }

 

public class IfPractice3 {
 public static void main (String args[]) {
 int num;
 num = 20 / 2;
   if(num == 11)  //... 1번
     System.out.println("1번");
    if(num != 10)  //... 2번
      System.out.println("2번");
   else System.out.println("3번");
 
 }
 }

 

두 예제의 결과가 어떻게 나올까요? else 구문은 1번 if문일까요. 아니면 2번 if문에 해당될까요. 

가까운 쪽 if문입니다. 

 

 

switch ~ case문

 

public class SwitchPractice {
    public static void main (String args[]) {
       int num;
       num = 13 / 2;
       switch(num) {
       case 6 : System.out.println("13 / 2 is 6"); break;
       default : System.out.println("13 / 2 = " + num); break;
       }
    }
}
    
 

 

while 문

 

조건이 참일 동안 {  } 안에 내용이 반복되는 구문으로 조건식이 거짓으로 되는 순간 반복(loop) 문을 빠져나옵니다. 

 

while (condition) {

   반복 문장

}

 

아래 예제는 숫자 20부터 1까지 감소하는 결과를 출력하는 구문입니다. 

 

public class WhilePractice {
   public static void main (String args[]) {
    int i;
    i = 20;
    System.out.println("Countdown start!");

/* 변수가 20에서 1이 될 때까지 계속해서 i 값 출력 */
    while(i > 0) {
      System.out.print(i);
      i--;
     }
   }
 }

 

결과:

 

Countdown start!
2019181716151413121110987654321

 

 

 

아래 예제는 while문에 대한 예제입니다. i값과 k값의 결과가 어떻게 나타나는지 이해해 봅시다. 

 

public class WhilePractice2 {

   public static void main (String args[]) {

   int i = 1, k =3;

   while(k < 40) {

       System.out.print(k + " ");

       i++;   //증가 연산자

       k *=i;  // k=k*i와 같은 의미로 k값과 i값의 곱을 k에 대입한다는 의미

   }

    System.out.println();

    System.out.print(i + " , " + k + " ");

   }

}

 

결과:

 

3 6 18 
4 , 72 

 

 

i값이 1일 때 k는 3입니다. (3 화면에 출력)

i값이 1 증가하여 2가 됩니다. k*=i에서 3*2가 되어 k는 값이 6이 됩니다. 

k=6이 조건 k <40에 만족하여서 k값 출력 (6 화면에 출력)

i값이 1 증가하여 3이 됩니다. k*=i 에서 6*3가 되어 k는 값이 18이 됩니다. 

k=18이 조건 k<40에 만족하여서 k값 출력 (18 화면에 출력) 

i값이 1 증가하여 4가 됩니다. k*=i 에서 18*4가 되어 k는 값이 72가 됩니다. 

k=72이 조건 k<40에 만족하지 않아서 while문이 끝납니다. 

while문이 끝나고, i값 4가 출력되고, k값 72가 출력되고 프로그램이 끝납니다. 

 

 

 

do~ while문 

 

while문과 사용방법은 같지만 무조건 한 번은 실행이 된다는 점에서 차이점이 있습니다. 

 

public class DoWhilePractice {
   public static void main (String args[]) {
      int i;
      i = 20;
      System.out.println("Countdown start!");
      do {
           System.out.print(i);
           i--;
            }while(i > 0);
       }
 }

 

 

for 문 

 

3단 구조 반복문입니다. 

 

for (초기식; 조건식; 증감식) {

         반복할 문장;

}

 

초기식: 1번만 처음에 실행합니다. 

조건식: 참일 경우만 반복합니다. 

증감식: 증가 또는 감소

 

public class ForPractice {
   public static void main (String args[]) {
   int i;
   System.out.println("Countdown start");
   for(i = 20; i > 0; i--) {
        System.out.print(i);
         }
     }
 }

 

 

 

중첩(nested)  for문

 

중첩 for문은 for문안에 for문을 넣는 방법으로 많이 쓰이는 구문입니다. 

알고리즘을 구성할 때 효과적이며 이러한 반복문을 통해 다양한 결과를 얻을 수 있습니다.

 

public class ForPractice2 {
  public static void main (String args[]) {
    int k;
    int i; 
    System.out.println("Nested Loops");
    for(k = 1; k <=3 ; k++) {
      for(i = 1; i <=5 ; i++)
        System.out.print("*");
    System.out.println();
}}}

 

 

결과: 

 

Nested Loops
*****
*****
*****

 

 

 

 

public class ForPractice3 {
  public static void main (String args[]) {
    int i,j,k; 
    System.out.println("Nested Loops");
       for(i = 1; i <=5 ; i++) {
         for(j = 1; j <=i ; j++)
          System.out.print("+");
         for(j = 1; j <=6-i ; j++)
           System.out.print("*");
    System.out.println();
 } } }

 

 

결과:

 

Nested Loops
+*****
++****
+++***
++++**
+++++*

 

 

 

이외에도 Arralist 구문이 나오면 사용하는 for -each문이 있습니다. 

 

https://tsyoon.tistory.com/83

 

For each

자바 언어에서 ArrayList 가 나오면서 나온 문법이 For each 구문입니다. for문이 for(초기값; 종료 범위; 증감 연산) 이렇게 정의해서 사용하는데 for each 구문은 for( 요소 값: 배열 값) 이런 구조로 사용

tsyoon.tistory.com

 

'프로그래밍 언어론 > JAVA 기초' 카테고리의 다른 글

return에 대하여 이해하기  (0) 2022.09.10
자리배치 프로그램 -JAVA  (0) 2022.09.04
연산자 예제, 상속과 캐스팅  (0) 2022.09.02
JAVA Online compiler  (16) 2022.08.27
For each  (0) 2022.08.22