[C언어] 6.제어문
C언어 학습 노트 : 6. 제어문#
1. 프로그래밍과 제어 구조#
- 프로그래밍은 절차적인 흐름을 논리적으로 작성하는 과정이다.
- 일상적인 행위(예: 기상 → 양치 → 식사)에서도 조건에 따라 분기점이 발생한다.
- 이러한 분기점을 제어문(control statement) 으로 표현하며, 제어문은 논리적 판단과 조건을 필요로 한다.
2. if문#
조건식의 참/거짓에 따라 분기를 수행하는 가장 기본적인 제어문이다.
중첩 if문은 가독성과 성능 측면에서 불리할 수 있다.
- 가능하다면 2분할(else if 구조 등)로 단순화하는 것이 바람직하다.
단, 현대 CPU와 컴파일러 최적화는 상당히 발달해 있으므로, “성능”보다는 가독성과 유지보수성을 우선적으로 고려하는 것이 좋다.
따라서
if문에서 “고성능”을 기대하기는 어렵고, 주요 목적은 조건 분기 처리에 있다.
3. switch문#
정수형 또는 열거형 값을 기준으로 분기를 수행한다.
문법 형식:
switch (expression) { case value1: // 실행 코드 break; case value2: // 실행 코드 break; default: // 기본 실행 코드 }switch문은 조건에 따라 점프 테이블(jump table)로 최적화될 수 있으므로, 항상 “모든 코드를 순차적으로 탐색한다”고 보기는 어렵다.단, 정수형/열거형만 사용할 수 있고, 문자열이나 복잡한 조건에는 사용할 수 없다는 점이 제한적이다.
가독성이 좋은 분기 처리에는 유용하지만, 성능상의 우위는 컴파일러와 상황에 따라 달라진다.
4. goto문#
프로그램의 흐름을 임의의 위치로 강제 이동시키는 제어문이다.
구조화된 프로그래밍 원칙에 어긋나므로 “악마의 코드”라고 불리며, 일반적으로 사용이 권장되지 않는다.
그러나 에러 처리, 중첩 루프 탈출, 리소스 해제와 같은 제한적 상황에서는 실용적인 용도로 사용되기도 한다.
- 예: 자원 해제를 위한 공통 종료 지점 처리
#include <stdio.h>
int main(void) {
FILE *fp = fopen("test.txt", "r");
if (!fp) goto error;
// 파일 처리 코드
fclose(fp);
return 0;
error:
printf("파일 열기 실패\n");
return 1;
}
학습 포인트 정리#
- 프로그래밍의 흐름 제어는 조건과 논리적 판단을 바탕으로 한다.
- if문은 기본적인 분기문이며, 가독성과 단순화를 우선해야 한다.
- switch문은 정수형/열거형 기반의 분기 처리에 적합하며, 가독성은 좋지만 적용 범위는 제한적이다.
- goto문은 일반적으로 지양해야 하지만, 예외적 상황(에러 처리, 자원 해제)에서는 유용하게 사용될 수 있다.