제어 흐름
|
|
이 문서의 내용은 출처가 분명하지 않습니다. 지금 바로 이 문서를 편집하여, 참고하신 문헌이나 신뢰할 수 있는 출처를 주석 등으로 표기해 주세요. 검증되지 않은 내용은 삭제될 수도 있습니다. 내용에 대한 의견은 토론 문서에서 나누어 주세요. |
|
|
이 문서는 위키백과의 편집 지침에 맞춰 다듬어야 합니다. 더 좋은 문서가 되도록 문서 수정을 도와주세요. 내용에 대한 의견이 있으시다면 토론 문서에서 나누어 주세요. |
제어 흐름(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를 하나하나 사람이 확인하기는 실제로 힘든 일이다. 이러한 소모적인 작업을 대체해주는 정적 분석 도구들을 사용한다면 사람이 직접 분석을 할 때의 시간 및 노력을 절약할 수 있을 것이다.