제어 흐름

위키백과, 우리 모두의 백과사전.
이동: 둘러보기, 검색

제어 흐름(control flow)은 프로그램에서 실행되는 각 구문, 명령어나 함수가 호출되는 순서를 의미한다.

범주[편집]

제어흐름을 나타내는 구문, 곧 제어문들의 종류는 각 프로그램 언어마다 다르나, 구문들의 실행 방식에 따라 분류할 수 있다.

  • 다른 구문에서 시작 (무조건 분기, 점프)
  • 어떠한 조건 만족 시 한 구문의 집합을 실행 (조건 분기)
  • 어떠한 조건이 만족 될 때까지 한 구문의 집합을 실행 (loop 구문)
  • 현재 실행 구문에서 떨어진 한 구문의 집합을 실행 (서브루틴)
  • 프로그램 실행을 중단 (무조건 중지)

인터럽트와 신호는 서브루틴과 유사한 방식으로 프로그램 제어의 흐름을 변경시키는 low-level 매커니즘이다. 그러나 프로그램 내부 제어의 흐름에 의해 실행되기 보다는 외부 신호나 이벤트에 대한 반응으로 주로 발생한다.

기계어나 어셈블리 언어에서는 control flow 명령은 주로 프로그램 카운터를 수정하는 방식으로 작동된다. 일부 CPU들의 control flow에 관련된 명령은 조건, 무조건 분기 명령에서만 가능하다.

종류[편집]

Goto 문[편집]

해당 label에 위치한 구문을 수행한다.

goto label

If...then...(else)문[편집]

  • if(조건문)GOTO label. 조건문을 만족하면 label에 위치한 구문을 수행한다.
  • if(조건문)then(구문)(endif). 조건문을 만족하면 해당 구문을 수행한다.
  • if(조건문)then(구문1)else(구문2)(endif). 조건문을 만족하면 구문1을 수행하고 만족하지 못한다면 구문2를 수행한다.
if (condition) { 
 statementOK;
} else {
 statementNO;
}

Case, switch문[편집]

명시된 값에 해당하는 case 절로 이동하여 해당하는 구문을 수행한다. 해당되는 case가 없을 때 기본동작을(default절) 수행한다.

switch (value) {
 case '1': statement1; break;
 case '2': statement2; break;
 case '3': statement3; break;
 default: statementD;
}

For 루프[편집]

변수가 명시된 값에 도달할 때까지 블록 안의 구문을 반복 수행한다.

for (i = 1; i < goal; i++;) {
 statement;
}

While 문[편집]

조건문을 더 이상 만족하지 않을 때까지 블록 안의 구문을 반복 수행한다.

while(condition){
 statement;
}

도구[편집]

프로그램 안에는 위에 나열된 종류의 구문 외에도 많은 control flow 관련 구문들이 존재한다. 그리고 프로그램 실행 상의 control flow 또한 무수히 존재한다. 프로그램 정적 프로그램 분석 시 이러한 프로그램 상의 control flow를 하나하나 사람이 확인하기는 실제로 힘든 일이다. 이러한 소모적인 작업을 대체해주는 정적 분석 도구들을 사용한다면 사람이 직접 분석을 할 때의 시간 및 노력을 절약할 수 있을 것이다.

바깥 고리[편집]