C — UNIX와 짝을 이룬 시스템 프로그래밍의 기준 (1972, Dennis Ritchie)
Entity (인물·조직)lectureverified2026-05-09

C — UNIX와 짝을 이룬 시스템 프로그래밍의 기준 (1972, Dennis Ritchie)

#vch#lecture-intro#A-language#g3

C — UNIX와 짝을 이룬 시스템 프로그래밍의 기준

1. 요약

C는 1972~73년 Bell Labs에서 Dennis Ritchie가 개발한 구조적·명령형·시스템 프로그래밍 언어이다. UNIX 커널을 고수준 언어로 다시 작성하기 위해 만들어졌고, 1973년 Version 4 UNIX부터 커널 대부분이 C로 재구현되었다. 최소한의 런타임 + 기계 명령에 효율적으로 매핑되는 추상이라는 설계 원칙이 50년 이상 지속되어, 오늘날까지 운영체제·컴파일러·임베디드 시스템의 사실상 표준 언어로 사용되고 있다.

2. 등장 배경

  • B 언어와 BCPL: Ken Thompson이 BCPL을 단순화하여 만든 B가 C의 직접 조상. PDP-11이라는 새 하드웨어에서 시스템 프로그래밍이 필요했지만 B는 타입이 없어서 한계가 명확했다.
  • UNIX 이식 문제: PDP-7에서 어셈블리로 작성된 UNIX는 다른 기종으로 옮길 수 없었다. Ritchie는 "어셈블리만큼 빠르면서, 다른 기종에서도 컴파일 가능한 언어"를 목표로 삼았다.
  • 1972~73년: Ritchie의 C 첫 구현. 1973년 11월 Version 4 UNIX의 커널이 C로 광범위하게 재작성된다 — "the Unix kernel was extensively re-implemented in C".

3. 핵심 특징

  1. 구조적 제어 흐름if, for, do/while, switch 등 Pascal·ALGOL 계열의 구조적 제어를 모두 도입. goto는 남겨두었으나 사용을 권장하지 않음.
  2. 포인터(Pointers) — 메모리 주소를 1급 시민으로 다룸. 시스템 프로그래밍의 본질을 언어 차원에서 노출. 이것이 C의 양날 — 강력함과 위험의 동시 원천.
  3. 이식성(Portability)"compiled for a wide variety of computer platforms and operating systems with few changes to its source code". UNIX가 여러 기종으로 퍼진 결정적 동력.
  4. 최소 런타임(Minimal Runtime) — 가비지 컬렉션·예외 처리 같은 무거운 추상이 없다. 기계 명령에 직접 매핑됨.
  5. 표준 라이브러리stdio.h, string.h, math.h 등 풍부한 함수 라이브러리. 언어는 작게, 기능은 라이브러리로.

4. 주 용도

  • 운영체제 커널: UNIX, Linux, Windows 일부, macOS 핵심 — 모두 C 기반.
  • 임베디드 시스템·디바이스 드라이버: 메모리·하드웨어 직접 제어가 필요한 모든 영역.
  • 컴파일러·인터프리터: GCC, Clang, CPython, Lua 등 대부분의 언어 처리계가 C로 구현.
  • 시스템 라이브러리: glibc, OpenSSL, SQLite 등 인프라 소프트웨어의 기반.

5. 그 시대 설계 도구 매핑

C가 본격 산업 적용된 1970년대 후반~80년대는 구조적 분석·설계의 황금기였다.

도구역할C와의 관계
Yourdon-DeMarco DFD (Data Flow Diagram) (1978~79)데이터 흐름 중심의 시스템 분해C 함수 호출 그래프와 직접 매핑
Yourdon-Constantine 구조도모듈 분해, 결합도(Coupling)·응집도(Cohesion)C .h/.c 파일 분리, 함수 간 결합 분석에 그대로 사용
JSP (Jackson Structured Programming) (Michael Jackson, 1975)데이터 구조→프로그램 구조 도출입력·출력 파일 구조를 C 함수 구조로 변환
HIPO (Hierarchy + Input-Process-Output) 차트 (IBM, 1970년대)계층적 함수 분해 + I/O 명세함수 단위 명세서로 C 코드 작성 전 단계에서 사용
K&R 표준 코딩 스타일 (1978)들여쓰기·네이밍·헤더 파일 구조코드 자체가 설계 문서가 됨

→ C의 최소주의 언어 설계풍부한 외부 설계 도구와 짝을 이루어 작동했다. 언어는 작지만, 그 위에 Yourdon·DeMarco·Jackson의 설계 방법론이 얹혀서 산업적 규모의 시스템이 만들어졌다.

6. 강의 활용

핵심 명제와의 연결: 언어는 어셈블리에서 C로 옮겨갔지만, 설계 사상(구조적 분해, 모듈 분리, 데이터 흐름 분석)은 오히려 더 정교화되었다. C가 산업 표준이 된 것은 언어가 좋아서가 아니라 언어와 짝을 이룬 설계 방법론(Yourdon DFD, JSP, K&R 스타일)이 함께 성숙했기 때문이다.

강의에서의 위치: G3의 산업적 대표 사례. Pascal이 교육의 대표라면 C는 산업 현장의 대표. "Pascal과 C가 같은 시대에 같은 사상(구조적 분해)을 공유하면서, 한쪽은 학교로·한쪽은 산업으로 갈라졌다"는 흐름.

오늘날의 흔적: 50년이 넘었지만 C는 여전히 Linux 커널·임베디드·시스템 라이브러리의 기준 언어이다. 그리고 K&R 책의 최소 언어 + 풍부한 설계라는 사상은 오늘날 minimal API + abundant patterns라는 형태로 모든 현대 언어 설계에 살아있다.

오늘 LLM 시대로의 다리: AI Agent에게 C 코드를 작성시키는 것은 쉽다. 그러나 C 코드를 안전하게 작성시키려면 — 메모리 누수, 버퍼 오버플로우, undefined behavior — Yourdon DFD나 K&R 스타일과 동등한 명세가 필요하다. 즉 Spec-driven Development는 새로운 것이 아니라 Yourdon·Jackson 시대의 정신이 LLM 시대로 옮겨온 것이다.

출처

  • Wikipedia, "C (programming language)", https://en.wikipedia.org/wiki/C_(programming_language)
  • Kernighan, B. W., & Ritchie, D. M. (1978). The C Programming Language. Prentice Hall.
  • Ritchie, D. M. (1993). "The Development of the C Language". History of Programming Languages II (HOPL-II), ACM.

그룹 시리즈

synthesis/group-g3 (시대 그룹 종합 카드)