반응형


분기문이란?


분기문은 프로그램을 수행하다가 어떤 조건을 만나면 다른 곳으로 흐름을 이동하게 만드는 구문이다. 순서도에서 예, 아니오에 따라 다른 길을 타고가는 화살표를 생각하면 되겠다. break, continue, return이 있는데, 보기만 해도 break(멈춰!), continue(계속해!), return(돌아가!) 가 떠오른다. 실제 쓰임도 그럴까? 한번 살펴보자.


1. break문


break문은 챗바퀴를 돌고 있던 루프로부터 프로그램 흐름을 끄집어내는 역할을 한다. 주로 for문이나 while문에서 빠져나오는데 사용한다.


 int a = 0;

Scanner sc = new Scnner(System.in);

while( true ) {

    System.out.prinln("문을 열려면 0을 쓰세요");

    a = sc.nextInt();

    if ( a == 0 ) {

    System.out.println ("문 열림");

    break;

    }

}


위 break문이 들어간 코드는 안쪽 while문에 걸려 있는 조건이 항상 true다. while문은 조건에 맞으면 해당 명령을 반복하게 만드는 구문이므로, 위 코드는 무한루프가 된다. 이때 프로그램 실행자에게 어떤 값을 계속 요구하게 되는데, 그 값이 0일 경우 무한루프를 빠져나오게 되는 것이다. 맞는 패스워드를 입력해야 하는 프로그램을 사용할 수 있는 곳에 이러한 분기문을 응용할 수 있겠다.


2. continue문


계속하라는 말이 떠오른다. 그러니까 뭘 계속하냐, 하면 현재의 반복은 중단하고 다음으로 넘어가라는 의미에서의 계속이다. 이때 레이블을 사용하지 않으면 Contine와 마주쳤을 때, 루프의 조건으로 분기하고, 레이블을 사용했을 때의 Continue는 레이블 바깥쪽의 루프로 분기한다. 


레이블을 안 썼을 때 

 레이블을 썼을 때

int i;


for( i = 1; i<= 10; i++){

    if( i % 2 == 0){

           continue;  //루프의 조건인 for문으로 돌아간다. 

     }

     System.out.print( i + " t");

int i, j, max = 0;

test;

for (i = 1; i<=5; i++) {

      max = i;

      j = 1;

     while (true) {

           System.out.print(j + " t";

           if (j == max) {

              System.out.println();

              continue test; // 레이블이 있는 while문이 아니라 바깥쪽 루                                        프인 세번째 줄 for문으로 분기한다.

            }

            j++

      }

  }


왼쪽과 오른쪽의 실행결과는 각각 다음과 같다.


 1    3      5      7      9


 1

 1    2

 1    2      3

 1    2      3      4

 1    2      3      4      5   



3. return 문


이건 반환하라는 말이다. 메소드(하나의 프로그램 단위)를 종료하면서, 해당 메소드에서 생긴 값을 메소드를 호출한 지점으로 보내는 것이다. 이때의 주의점은 메소드의 리턴값의 성질에 따라 쓰는 법이 달라진다는 것이다. 리턴값이 데이터형태면 데이터값을 써주고 void형이라면 그냥 return만 써줘도 된다.


public void method() {   

     //메소드 실행; 

     return; 

     // 메소드를 종료 


public void othermethod(int a, int b) { 

     //메소드 실행 

   return a+b; 

    //메소드를 종료

    //메소드를 호출한 지점으로 돌아가면서 반환값을 호출한 곳으로 가져간다. 


공부 외 단상


멈춰, 계속해, 돌아가, 생각하면 도로의 신호등을 떠올리게 된다. break브레이크문은 빨강, continue콘티뉴문은 초록, return리턴문은 노랑, 이라고 하면, 어폐가 있겠지? break문만 해도 동작그만이 아니라 반복동작 그만이니까 말이다. 그냥 재미로 속편하게 생각해본다. 그나저나 노란 신호등의 진짜 의미는 빨강에 가깝다. 멈춤 혹은 우회, 조심하라는거다. 옐로카드!


분기문으로 움직이는 컴퓨터가 부럽다. 컴퓨터는 싸움을 잘 할 것 같다. 상대가 어떻게 움직이면 어디를 몇 번 반복해서 때려, 어떻게 움직이면 반복을 멈추고 다른 데 때려, 싸움을 하는데 정말 냉정한 승부사일 것 같다. 근데 철권같은 격투기게임은 왜 사람한테 맥을 못 추는 걸까? 슈퍼컴퓨터라면 다를까? 스타크래프트같은 거 인간하고 한번 상대한다는데. 바둑도 인간을 제압하는데 경우의 수가 적은 나머지 분야는 말할 것도 없이 알파고의 승리가 아닐까?


내가 부러운 건 그거다 싸우는데 감정으로 싸우지 않고, 머리로만 싸울 수 있다는 것. 스트레스 없는 싸움을 수행할 수 있다는 것.


반응형

+ Recent posts