21. What — 메모리는 그냥 0과 1의 나열이다
3- 컴퓨터 RAM의 모든 데이터는 비트(bit)의 연속이다
4- 예: 메모리에 저장된 01000001_{2} (8비트)는 그 자체로는 아무 의미가 없다
5- 이 비트 패턴을 정수로 읽으면 → $65$
6- 문자로 읽으면 → \text{'A'} (ASCII 65)
7- 부동소수점의 일부로 읽으면 → 전혀 다른 값
8- 즉, 같은 비트 패턴이 해석 방식에 따라 완전히 다른 의미를 가진다
92. Why — 자료형이 해석의 규칙을 제공한다
10- 자료형(data type)은 비트 패턴에 "이것은 정수다", "이것은 문자다"라는 의미(semantics)를 부여한다
11- 자료형이 하는 3가지 역할:
12 • 크기 결정 — 이 변수가 메모리를 몇 바이트 차지하는가?
13 • 해석 규칙 — 저장된 비트를 어떤 방식으로 읽을 것인가?
14 • 연산 규칙 — 이 값에 어떤 연산(+, -, *, /)이 허용되는가?
15- 자료형이 없다면 컴파일러는 a + b를 정수 덧셈으로 할지, 부동소수점 덧셈으로 할지 결정할 수 없다
16- Dennis Ritchie는 C를 설계할 때 "프로그래머가 하드웨어에 가까운 수준에서 타입을 선택할 수 있어야 한다"고 강조했다 (Ritchie, 1993)
173. Why — C가 프로그래머에게 자료형 선택 권한을 주는 이유
18- Python이나 Java와 달리, C는 자료형 크기를 프로그래머가 직접 선택한다
19- 이유는 단순하다: 성능과 메모리 효율의 직접 제어
20- 예시 비교:
21 • \text{char} → 1바이트 (0~255 또는 -128~127)
22 • \text{short} → 2바이트 (최대 약 ±32,000)
23 • \text{int} → 보통 4바이트 (최대 약 ±21억)
24 • \text{long long} → 8바이트 (최대 약 ±9.2경)
25- 값의 범위가 0~100이면 \text{char} 1바이트로 충분한데, \text{int} 4바이트를 쓰면 메모리를 4배 낭비한다
264. How — 임베디드에서 타입 선택이 생사를 가르는 사례
27- 8비트 MCU(예: ATmega328P, Arduino Uno의 칩)는 RAM이 겨우 2KB이다
28- 센서 값 100개를 저장한다고 가정하면:
29 • \text{int} (4바이트) × 100 = 400바이트 → RAM의 20% 소모
30 • \text{uint8\_t} (1바이트) × 100 = 100바이트 → RAM의 5%만 사용
31- 실제로 임베디드 펌웨어에서 \text{int}를 \text{uint8\_t}로 바꾸는 것만으로 메모리 부족 버그를 해결하는 경우가 흔하다 (Barr, 2018)
32- 이것이 C가 "자료형을 프로그래머에게 맡기는" 설계 철학의 핵심이다
335. 비유 — 자료형은 '단위'와 같다
34- 숫자 $100$만으로는 의미가 없다 — 100원? 100kg? 100°C?
35- 단위가 숫자에 의미를 부여하듯, 자료형이 비트 패턴에 의미를 부여한다
36- C에서 자료형을 명시하는 것은 "이 비트들은 이렇게 읽어라"라는 계약서를 작성하는 것과 같다
37핵심 정리
38- 메모리 자체에는 의미가 없다 → 자료형이 의미를 부여한다
39- 자료형 = 크기 + 해석 규칙 + 연산 규칙
40- C는 성능/메모리 효율을 위해 프로그래머에게 자료형 선택 권한을 준다
41- 임베디드처럼 자원이 제한된 환경에서 자료형 선택은 곧 생존 문제이다