코드 블록과 제어문의 종류


프로그램은 명령문의 집합으로 구성되어 있다. 코드 블록(Code Block)은 프로그램의 명령문을 논리적으로 결합하기 위해 그룹을 지어 나누어 놓은 것이고, 제어문은 프로그램 문장의 실행 흐름을 제어하는 명령문이다. 이 글에서는 코드 블록과 제어문의 종류를 살펴보자.


1.코드 블록

여러 명령문을 논리적으로 결합해야 할 때 중괄호 ( { } )를 사용해서 명령문 그룹을 만들어 표현한다. 

이러한 명령문 그룹을 코드 블록(Code Blodk)이라고 한다.코드 블록 안에는 변수를 선언할 수 있고 다른 코드 블록을 포함할 수도 있다.

코드 블록 안에서 선언된 변수는 코드 블록이 끝나면 더 이상 접근할 수 없다. 즉 , 변수는 자신이 선언된 코드 블록 안에서만 유효하며 코드 블록이 끝나면 더 이상 유효하지 않다. 이코드에는 Main함수의 코드 블록이 있고 그 코드 블록안에 내부 코드 블록이 있다.

outer 변수는 Main 함수의 코드 블록에 선언되고 있고, inner 변수는 내부 코드 블록안에 선언되어 있다. 따라서 outer 변수는 Main 함수 코드 블록 안의 어느 곳에서나 접근이 가능하고 , inner 변수는 내부 코드 블록 안에서만 접근이 가능하다. 1번 문장에서 outer 변수는 내부 코드 블록 안에서 접근했지만 Main 함수의 코드 블록 내부므로 접근이 가능하다. 2번과,3번 문장에서는 각 변수들이 선언된 코드 블록과 변수에 대한 접근이 같은 코드 블록에서 이뤄졌으므로 당연히 접근이 가능하다. 그러나 4번 문장은 내부 코드 블록에서만 유효한 inner 변수를 내부 코드 블록의 외붕서 접근하려고 하기 때문에 오류가 발생한다.


 

      int inner ;


      outer = 5 ;    ---------------------1번

     

      inner = 10 ;   ---------------------2번



      outer = 6 ;             -------------3번


      inner = 12 ; // 오류  -------------4번




2.제어문의 종류

프로그램을 실행할 때는 논리적인 흐름이 필요한데, 이러한 문장의 논리적인 흐름을 통제 해주는 것이 제어문이다. 제어문은 성격에 따라 조건문, 반복문, 그리고 점프문으로 구분할 수 있다.

<조건문>

조건문은 조건식의 값에 따라 각각에 해당되는 명령문을 수행한다. 조건문에는 if문과 switch문이 있다.

- if문 : 조건식의 참/ 거짓 여부에 따라 명령문을 수행한다.

- switch문 : 조건 값과 맞는 부분의 명령문을 수행한다.

<반복문> 

반복문은 조건이 만족하는 동안 특정 명령문을 반복적으로 수행한다. 반복문에는 while문, do문, for문, foreach문이 있다.

-while문 : 조건식의 참/거짓 여부에 따라 명령문을 반복 수행한다.

-do문 : 먼저 명령문을 수행한 후 조건식의 참/거짓 여부에 따라 반복 수행 여부를 결정한다.

-for문 : 반복횟수가 정해져 있는 경우 명령문을 반복 수행한다.

-foreach : 컬렉션이나 배열의 멤버에 접근해서 명령문을 수행한다.

<점프문>

제어권을 이동시킬 때 점프문을 사용한다. 점프문에는 goto문, break문, contnue문이 있다.

-goto문 : 제어권을 해당 레이블로 이동시킨다.

-break문 : 반복문이나 switch 문의 코드 블록으로부터 빠져나오게 한다.

-continue문 : 제어권을 조건식으로 이동시킨다.


조건문 

조건문은 조건식의 값에 따라 각각에 해당하는 명령문을 수행한다. 조건문에는 if문과 switch문이 있다.


1.if문

if문은 조건식에 따라 각각에 해당하는 명령문을 실행하는데, 다음과 같이 사용한다.


  if(조건식)

              명령문 ; // 조건식이 참일 때 실행


  else

              명령문 ; // 조건식이 거짓일 때 실행 

if문은 조건식을 조사해서 조건식이 참일면 명령문1을 수행하고 조건식이 거짓이면 명령문2를 수행한다. 실행 명령문이 한 문장 이상일 때는 다음처럼 중괄호를 사용해서 코드 블록으로 묶어주면 된다.


2.switch문

if문 중에 if... else if ... else문은 조건식을 위에서부터 순차적으로 조사한다. 이 경우 특정 조건에 대한 명령문이 가장 아래에 있다면 상위의 모든 조건을 다 조사해야 하는데, 명령문이 길 경우 많은 시간이 걸린다. 이 경우 switch문을 사용하면 이러한 불편함을 해소 할 수 있다. switch문은 조건변수에 해당하는 특정 레이블로 이동한 후 명령문을 바로 실행할 수 있다. 기본 구문은 아래와 같다.


  switch(조건변수) {


   case 값1 :

       // 조건변수의 값이 값1과 일치할 때 실행

       명령문1 ;

       break ;  


        Case 값2 :

        // 조건변수의 값이 값2와 일치할 때 실행

       명령문2 ;

       break;

      ...


   case 값n : 

        // 조건변수의 값이 값n과 일치할 때 실행

       명령문n ;

       break;


   default :

       // 어떠한 값도 만족하지 않을 때 실행

       명령문z ;

       break;

     }

 


switch문은 조건변수에 입력된 값과 case문의 레이블 값이 일치하는 case 블록으로 제어권을 넘기고 해당 case 블록의 명령문을 실행한다. 일치하는 값이 없다면 default 블록으로 제어권이 이동되어 명령문z를 실행한다. 조건변수와 일치하는 case문 레이블 값이 없고 default 블록도 없다면, switch문의 가장 마지막으로 제어권이 이동한다.

num변수의 값을 5로 나눈 나머지의 값과 동일한 값을 포함하는 case 블록으로 이동해서 해당 case 블록의 명령문을 수행한다. 

C#은 C, C++, 자바와 달리 조검 검사를 순차적으로 하지 않는다. 따라서 모든 case문 블록 끝에는 반드시 점프문인 break문이나 return문, throw문 , goto문을 실행해서 제어권을 종료하거나 이동해줘야 한다. 또한 조건변수에 올 수 있는 자료형은 정수형, 문자형, 열거형 , string형이다.


반복문

반복문은 조건이 만족하는 동안 특정 명령문을 반복적으로 수행한다. 반복문에는 while문 , do문, for문, foreach문 등이 있다.


1.while문

while문은 조건식을 만족하는 동안 반복적으로 실행하는데, 기본 구문은 아래와 같다.

  while (조건식) {

            명령문1 ;

            명령문2 ;

             ...

            명령문n ;

  } 

while문의 조건식을 조사해서 참이면 코드 블록 안의 명령문을 차례대로 수행한다. 마지막 명령문이 실행되면 조건식을 다시 조사하는데, 조건식이 참이면 다시 명령문을 수행하고, 거짓이면 while문을 빠져나온다. 즉, 조건식이 참인 동안 명령문을 반복해서 수행한다.


2.do ... while문

while문의 경우 조건식이 거짓이면 while문 안의 명령문을 한 번도 수행하지 않는다. 하지만 경우에 따라서는 명령문을 먼저 실행한 후에 조건을 검색해야 할 때도 있다. 이런 경우 do ... while문을 사용한다.기본구문과 순서도는 아래와 같다.

  do { 

              명령문1 ;

              명령문2 ;

              ...

              명령문n ; 

  } while (조건식)  

do  ... while문은 코드 블록 안의 명령문을 먼저 수행한 후에 조건식을 조사한다. 조건식의 참/ 거짓 여부에 따라 코드 블록 안의 문장을 다시 수행하거나 do  ... while문을 빠져 나온다. 따라서 처음 한 번은 반드시 수행하고 그 후에 조건에 따라 반복 여부가 결정된다.

while문에서 사용했던 예제를  do  ... while문을 사용해서 수정할 수 있다.


3.for문

while문과 do ... while문이 조건에 따라 반복 수행한다면 for문은 반복 횟수가 먼저 결정 되었을 때 사용한다. 기본 구문과 순서도는 다음과 같다. 

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

             명령문1;

             명령문2;

             ...

             명령문n;

   }  

이와 같이 프로그래머가 실수로 증감 부분인 i++를 쓰지 않아 변수 i값을 증가시키지 않는다면 이 코드는 무한히 반복된다. for문의 

경우 증감 부분이 for문에 반드시 포함되어야 하므로 이와 같은 실수를 줄일 수 있다.


점프문

제어권을 이동시킬때 점프문을 사용한다. 점프문에는 goto문, break문, continue문이 있다.


1.goto문

goto문은 프로그램 실행의 제어권을 이동시킨다. goto문이 지시하는 레이블은 반드시 존재해야 하고 goto문이 접근 가능한 위치에 있어야 한다. goto문은 사용된 곳보다 상위 코드 블록으로는 제어권을 이동할 수 있지만 하위 코드 블록으로는 제어권을 이동할 수 없다.

goto문을 사용하면 자칫 프로그램의 흐름을 혼란스럽게 만들 수 있기 때문에 switch문 외에는 사용을 자제하는 편이 좋다.


2.break문 , continue문

break문의 역할은 반복문의 코드 블록 밖으로 제어권이 나오게 하는 것이다. 이와 비슷하지만 continue문은 제어권을 반복문의 조건식으로 이동시킨다. 문장에서 break문을 만나면 반복문(while문, do ...while문, for문 , foreach문)이나 switch문은 실행을 멈춘다. 이에 반해서 continue 문을 만나면 반복문의 조건식을 다시 조사해서 실행여부를 결정한다.


예외처리

개발한 프로그램이 실행 중에 오류가 나거나 멈출 수 있는데, 이러한 현상을 통틀어 예외현상 이라고 한다. 예외현상은 프로그램을 만드는 개발자도 예상하지 못하는 경우가 많다. 특히 값을 입력받아서 출력하는 경우에 입력 값에 따라 오류가 발생할 수도 , 그렇지 않을 수도 있기 때문이다. 예를 들어 다음과 같은 경우를 생각해 볼 수 있다.

-사용자에게 정수형 변수 A를 입력받는다.

-사용자에게 정수형 변수 B를 입력받는다.

-A를 B로 나눈값, 즉 (A%B) 값을 정수형 변수 C에 저장한다.

-C 값을 사용자에게 출력해서 보여준다.

이경우에서 A=4, B=2 를 입력 받으면 C=A/B = 4/2 =2 를 정상적으로 출력해서 사용자에게 보여준다. 그러나 사용자가 B값에 2가 아닌 0을 입력했다고 생각해보자. C = A/B = 4/0 , 즉 정수 4를 0으로 나누는 연산이 시작된다. 이 경우 오류가 발생하며 프로그램이 실행 중에 강제적으로 멈출 수 있다. 이는 예외 현상의 간단한 예이며, 예외현상은 프로그램의 크기가 클수록 발생할 확률이 높다. 따라서 프로그램의 비정상적인 종료나 오류발생을 방지하기 위해서 예외처리를 해줘야 한다.




'정보 > IT' 카테고리의 다른 글

코드 블록과 제어문  (0) 2018.03.10
프로그램 구성 요소  (0) 2018.03.10
C#  (0) 2018.03.09
프로그래밍 언어  (0) 2018.03.08

+ Recent posts