C 프로그래밍 언어는 시스템 프로그래밍의 근간이 되는 강력한 언어이지만, 다른 현대적인 프로그래밍 언어와 비교했을 때 몇 가지 명확한 한계를 가지고 있습니다. 이 글에서는 C 언어의 주요 제약 사항을 살펴보고, C 프로그램의 기본 구조와 실제 예제 코드까지 함께 알아보겠습니다.
C 언어의 주요 한계점
객체지향 개념 미지원: C 언어는 상속(inheritance), 다형성(polymorphism), 캡슐화(encapsulation), 데이터 추상화(data abstraction)와 같은 객체지향 프로그래밍의 핵심 개념을 지원하지 않습니다.
실시간 오류 검출 불가: 코드 작성 중 한 줄씩 오류를 검사하지 못하고, 전체 코딩이 완료된 후에야 버그를 확인할 수 있습니다.
네임스페이스 부재: 이름 충돌을 방지하는 네임스페이스(namespace) 기능이 없어 대규모 프로젝트에서 변수 및 함수 이름 관리가 어렵습니다.
데이터 추상화 수준 부족: 데이터 추상화 수준이 낮아 매우 큰 데이터를 처리하는 능력이 제한적입니다.
예외 처리 미지원: try-catch 같은 예외 처리(exception handling) 메커니즘이 없어 사용자가 체계적으로 오류를 감지하고 처리하기 어렵습니다.
생성자·소멸자 미지원: 객체의 초기화와 해제를 자동으로 관리해 주는 생성자(constructor)와 소멸자(destructor) 개념이 없습니다.
현실 세계 문제 해결의 한계: 복잡한 실세계 문제를 완전하게 모델링하여 해결하기에는 구조적으로 부족한 면이 있습니다.
보안성 저하: 포인터를 직접 다루는 특성 등으로 인해 다른 프로그래밍 언어에 비해 상대적으로 보안에 취약합니다.
C 프로그램의 기본 구조
일반적인 C 프로그램은 아래와 같은 구조로 작성됩니다.
/* 문서화 영역 */
전처리기 지시문
전역 선언
main ( ){
지역 선언
실행문
}
반환타입 함수명 (인수 목록){
지역 선언
실행문
}
각 영역의 역할은 다음과 같습니다.
문서화 영역: 프로그램의 작성자, 작성일, 목적 등을 주석으로 기술합니다.
전처리기 지시문: #include, #define처럼 컴파일 전에 처리되는 명령문입니다.
전역 선언: 프로그램 전체에서 사용되는 전역 변수나 함수를 선언합니다.
main( ) 함수: 프로그램 실행의 시작점으로, 지역 선언과 실행문으로 구성됩니다.
사용자 정의 함수: 필요에 따라 반환 타입과 인수 목록을 갖는 함수를 추가로 정의할 수 있습니다.
예제: 원의 둘레 구하기
다음은 반지름을 입력받아 원의 둘레를 계산하는 C 프로그램입니다.
/* 작성자 : Tutorialspoint
목적 : 원의 둘레를 구하는 프로그램 */
#include<stdio.h>
#include<conio.h>
#define PI 3.1415
main ( ){
float c, r;
clrscr ( );
printf ("enter radius of circle");
scanf ("%f", &r);
c = 2 * PI * r;
printf ("Circumference = %f", c);
getch ( );
}
실행 결과
Enter radius of circle r=4 Circumference of circle c=25.132000
위 예제에서 #define 매크로로 정의된 PI 값과 반지름 r을 이용해 c = 2 * PI * r 공식으로 원의 둘레를 계산합니다. 이처럼 C 언어는 절차 지향 방식으로 간결하고 빠른 프로그램을 작성할 수 있지만, 앞서 살펴본 한계들 때문에 대규모 소프트웨어 개발에는 C++, Java 같은 객체지향 언어가 더 적합한 경우가 많습니다.