1.코드 블록과 제어문의 종류


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


<코드블록>

여러 명령문을 논리적으로 결합해야 할 때 중괄호( { } ) 를 사용해서 명령문 그룹을 만들어 표현한다. 이러한 명령문 그룹을 코드 블록(Code Block) 이라고 표현 한다. 코들 블록 안에는 변수를 선언할 수 있고 다른 코들 블록을 포함할 수도 있다. 코드 블록 안에서 선언된

변수는 코드 블록이 끝나면 더 이상 접근할 수 없다. 즉 , 변수는 자신이 선언된 코드 블록 안에서만 유효하며 코드 블록이 끝나면 더 이상 유효하지 않는다. 이 코드에는 main 함수의 코드 블록이 있고 그 코드 블록 안에 내부 코드 블록이 있다. outer 변수는 Main 함수의 코드 블록에 선언되어 있으며, inner 변수는 내부 코드 블록안에 선언되어 있다. 따라서 outer 변수는 Mail 함수 코드 블록 안의 어느 곳에서나 접근이 가능하며, inner 변수는 내부 코드 블록 안에서만 제한적인 접근이 가능하다고 할 수 있다.


<제어문의 종류>

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

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

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

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


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

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

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

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

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


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

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

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

▶continue문 : 제어권을 조건식으로 이동시킬 수 있다.


2.조건문


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


<if문>

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

if문은 조건식을 조사해서 조건식이 참이면 '명령문1'을 수행하고 조건식이 거짓이면 '명령문2'를 수행한다. 실행 명령문이 한 문장 이상일 때는 다음처럼 중괄호를 사용하여 코드블록으로 묶어주면 된다. age변수 값이 18보다 크면 login 변수 값을 true로 할당하고 화면에 "당신을 환영합니다" 라는 메시지를 보여준다. 반대로 age 변수 값이 18보다 작거나 같으면 login변수에 할당되는 값은 false며 성인만 입장이 가능합니다라는 메시지를 보여준다.

01 using system;

02

03 class Ifstate
04 {

05  static void Main (string [ ] args)

06  {

07     int age;

08     bool login; 

09

10     age = 25 ; // age에 값 할당

11

12     if (age > 18)

13     {

14          login = ture;

15         Console.Writeline ( "당신을 환영합니다") ;

16     }

17  

18          else

19     {

20        login = false;

21        console.Writeline ("성인만 입장이 가능합니다!");

22      }

23    }

24  }


10행에서 age 변수에 25를 할당했으므로 실행결과는 다음과 같다.


당신을 환영합니다.

Press any key to continue 


여기서는 조건식1을 만족해서 참이면 명령문1을 수행한 후 종료하고, 조건식1이 거짓이면 조건식2를 조사하게 된다. 조건식2가 참이면 명령문2를 수행한후 종료하지만 거짓일경우 다음 조건식 3을 조사하게 된다. 이러한 방식으로 '조건식n' 까지 반복해서 만족하는 조건식이 없을 경우 else문 안의 명령문z를 실행한다.


<switch문>

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

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

default 블록도 없다면, switch문의 가장 마지막으로 제어권이 이동한다.



3.반복문


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


<while문>

while문은 조건식을 만족하는 동안 반복적으로 명령문을 실행하는데, 기본 구문은 다음과 같다. while문의 조건식을 조사하여 참이면 코드블록 안의 명령문을 차례대로 수행한다. 마지막 명령문이 실행되면 조건식을 다시 조사하는데, 조건식이 참이면 다시 명령문을 수행하고 거짓일경우 while문을 빠져 나온다. 즉 조건식이 참인 동안 명령문을 반복하여 수행한다. 변수 i의 값이 0으로 초기화 되어있을 경우 while문 안의 명령문을 수행하고, 변수i 값은 1씩 증가된다. 따라서 0부터 9까지의 숫자를 콘솔 화면에 출력하고 프로그램이 종료된다.


<do while문>

while문의 경우 조건식이 거짓이면 while문 안의 명령문을 한 번도 수행하지 않는다. 하지만 경우에 따라서는 명령문을 먼저 실행한 후에 조건을 검색해야 할 때도 있다. 이런 경우 do... while문을 사용한다. do... while문은 코드 블록 안의 명령문을 먼저 수행한 후에 조건식을 조사한다. 조건식의 참/거짓 여부에 따라 코드 블록 안의 문장을 다시 수행하거나 do... while 문을 빠져 나온다. 따라서 처음 한 번은 반드시 수행하고 그 후에 조건에 따라 반복 여부가 결정된다.


<for문>

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

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

                명령문1;

                명령문2;

                ...

                명령문3;

   } 

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

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

변수i에 초기 값0을 할당하고, 조건식 (i<10)을 조산한다. 초기 값이0으로 조건식에 만족하므로 명령문을 실행한다. 그 후에 증감(i++) 부분을 수행하면 변수 i의 값은 1이 된다. 다시 조건식 (i<10) 조사해서 참이면 명령문을 수행하게 된다. 변수 i값은 루프를 반복할 때마다 1씩 증가할 것이고 변수i의 값이 10에 도달하기 전까지는 for문 코드 블록안의 명령문을 반복적으로 실행한다. 변수 i를 사용할 때는 변수의 코드 블록의 유효 범위에 주의해야 한다. 


<foreach문>

일련의 데이터를 객체 하나에 저장하고자 할 때 우리는 배열이나 컬렉션 객체를 이용한다. foreach문은 이런 배열과 컬렉션 객체 내의 데이터에 접근할 때 사용된다. Araylist 객체를 사용하려면 System.Collections 네임스페이스를 먼저 표기해줘야 한다. 코드 블록 부분에서는 Arraylist 객체를 만들고 for문을 통해 멤버들을 Arraylist 객체인 numbers에 추가시킨다. 코드 블록에서는 numbers 객체인 일련의 데이터인 멤버를 모두 찾아 화면에 출력해 준다.


4.점프문


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


<goto문>

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

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


<break문,continue문>

break문의 역할은 반복문의 코드 블록 밖으로 제어권이 나오게 하는 것이다. 이와 비슷하지만 continue문은 제어권을 반복문의 조건식으로 이동시킨다. 문장에서 break문을 만나면 반복문(while문, do...while문, for문, foreach문) 이나 switch문은 실행을 멈춘다. 이에 반해서 continue문을 만나면 반복문의 조건식을다시 조사해서 실행여부를 결정한다. 명령문 실행중 break문을 만나면 곧바로 반복문을 빠져 나온다. 9행의 for문을 통해 ,i가 1씩 증가하면서 11행에서 i값과 3을 나누었을때 나머지가 0인지 체크한다.i가 3이 되어 나머지가 0이되자 ,break문을 통해 for문을 빠져 나간다.



5.예외처리


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

-사용자에게 정수형 변수 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