용어(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'; }
메모리 희생을 감수할 때
두 연산을 10억번 반복 했을 때, minGW에서 약 0.71초와 0.49초의 결과가 나왔으며, GPT의 결론은 12.7초 : 9:7초가 나왔습니다. 이는 무려 30 ~ 40%에 해당하는 성능차이이며, 좀 더 복잡한 알고리즘의 경우 훨신 더 많은 차이를 보일 수 있습니다.c = g[i & 1];
산술연산보다 비트연산이 빠르고, 분기연산보다 배열 처리가 빠르지만, 실제 명령어 조합에 따라 원하는 퍼포먼스가 발휘되지 않을 수 있습니다. 이는 명령어 조합이 (컴파일 옵션에 따라) 원하지 않는 방향으로 발현될 수 있다는 점을 시사합니다.
3항 연산
if문의 내용이 간단할 때, 간단하게 기술 할 수 있습니다.
if(A>B) { max = A; }else{ max = B; }
동일한 내용의 3항연산자
max = (A>B)? A:B;
switch
- if와 switch의 실제 동작은 100% 동일합니다.
- case간에 구분은 break;문을 사용합니다.
만약 break;가 없다면 계속해서 수행합니다.
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
for(int i = 0; i < 10; i++)
를 암기합니다.- 수정해서 사용하는 방법 제안
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번 실행하는 차이점이 있습니다.