용어(term)

용어 한국어 의미
branch 분기 주어진 조건에 따라 코드의 실행 흐름이 변환 되는 지점 또는 현상
loop 반복문 순차적 흐름에서 반복이 진행된다는 것은 코드블럭의 종단에 최초로 회귀하는 분기가 존재하기 때문입니다. 만약 이 조건에 설계오류(버그)가 있다면, 무한루프에 빠집니다.
body 내용 코드블럭에 들어가는 내용을 의미합니다.

분기문

제어문 반복문 강제이동
if(제어조건){
   …
}
while(반복조건) {
   …
}
{
   break;
}
if(제어조건){
   …
}else{
   …
}
do {
   …
} while(반복조건);
{
   continue;
}
if(제어조건1){
   …
}else if(제어조건2){
   …
}else if(제어조건3){
   …
}else if(제어조건4){
   …
}else if(제어조건5){
   …
}
for(초기값;반복조건;증감) {
   …
}
goto 레이블명;
   …
   …
   …
레이블 :
   …

if

컴퓨터의 파이프라인 작동동작을 이해할때, 일반적으로 분기문은 연산속도를 저하하는 요소로 받아들여집니다. 따라서 IF문을 최대한 자제하는 것이 성능향상에 도움이 됩니다. 예를 들어:

if문을 사용할 때
if (i & 1)
{
    c = 'A';
}
else
{
    c = 'B';
}
메모리 희생을 감수할 때
c = g[i & 1];
두 연산을 10억번 반복 했을 때, minGW에서 약 0.71초와 0.49초의 결과가 나왔으며, GPT의 결론은 12.7초 : 9:7초가 나왔습니다. 이는 무려 30 ~ 40%에 해당하는 성능차이이며, 좀 더 복잡한 알고리즘의 경우 훨신 더 많은 차이를 보일 수 있습니다.

산술연산보다 비트연산이 빠르고, 분기연산보다 배열 처리가 빠르지만, 실제 명령어 조합에 따라 원하는 퍼포먼스가 발휘되지 않을 수 있습니다. 이는 명령어 조합이 (컴파일 옵션에 따라) 원하지 않는 방향으로 발현될 수 있다는 점을 시사합니다.

3항 연산

if문의 내용이 간단할 때, 간단하게 기술 할 수 있습니다.

if(A>B) {
  max = A;
}else{
  max = B;
}
동일한 내용의 3항연산자
max = (A>B)? A:B;

switch

if(Input == 1) {
  printf("1이 입력되었습니다.");
}else if(Input == 2){
  printf("2가 입력되었습니다.");
}else{
  printf("입력값이 올바르지 않습니다.");
}
동일한 내용의 switch
switch(Input) {
  case 1:
    printf("1이 입력되었습니다.");
    break;
  case 2:
    printf("2가 입력되었습니다.");
    break;
  default:
    printf("입력값이 올바르지 않습니다.");
}

continue

해당 블럭({ })의 가장 마지막에 도착한 것으로 간주합니다. 예시에서, 나누어 떨어지지 않는 수는 continue에 의해서 건너뛰기 됩니다.

for (int i = 0; i < 10; i++) {
  if (i % 3)
    continue;

  printf("continue : %d\n", i);
}

break

해당 블럭({ })의 수행을 중단합니다. 예시에서, 5를 만나면 해당 블록 수행을 중단합니다.

for (int i = 0; i < 10; i++) {
  if (i == 5)
    break;

  printf("break : %d\n", i);
}

goto

{
  goto LabelA;
  ...
LabelA:
}
      

goto문의 동작은 매우 직관적입니다. 다만, 프로그래머의 제어 실수 가능성이 높다는 인식이 있기 때문에 추천하지 않는 방법 중 하나입니다.

반복문

for, while, do .. while 모두 반복을 수행합니다.

for

10번 반복하는 for문
for(int i = 0; i < 10; i++) { }

while

10번 반복하는 while문
int i = 10;
while(i--) { }

do .. while

10번 반복하는 do .. while문
int i = 10;
do{
  ...
}while(i--);

do ... while문은 최소한 1번 실행하는 차이점이 있습니다.