이번 Step에서 잡아야 할 것
- CPU가 이해하는 언어: 기계어(0과 1) = 명령어들의 집합
- 컴파일(Compile): 소스 코드 → 기계어로 “번역”
- 빌드(Build): 컴파일 + 링크 등 “실행 파일을 만드는 전체 과정”
- 실행(Run): 만들어진 실행 파일을 OS가 로드하고 CPU가 수행
CPU가 이해하는 것 (기계어와 인스트럭션)
- CPU는 0과 1(기계어)로 표현된 명령만 처리 가능
- 이때 “가능한 명령어 목록”이 바로 인스트럭션셋(Instruction Set, ISA)
- 예: 더하기, 빼기, 메모리에서 값 읽기/쓰기, 점프(분기) 같은 기본 동작...
- 사람이 기계어를 직접 작성하는 건 현실적으로 어렵습니다(가독성/생산성/실수 위험).
대안: 프로그래밍 언어 + 컴파일러(번역기)
우리가 하는 일은 단순합니다.
- 사람이 읽기 쉬운 언어(C/C++ 등)로 소스 코드 작성
- 컴파일러가 소스 코드를 분석해 기계어로 번역
- 결과물로 실행 파일(.exe) 또는 중간 산출물(.obj 등)이 생성
간단히 흐름을 그리면 이렇게 됩니다.
소스 코드(.cpp) ──(컴파일/링크: 빌드)──> 실행 파일(.exe) ──(실행)──> RAM 로드 ──> CPU가 수행
Visual Studio 기준 “빌드”와 “실행”의 차이
- 빌드(Build): “번역 + 조립”해서 실행 파일을 만드는 과정
- 보통 컴파일(번역) + 링크(여러 조각 합치기)가 함께 동작
- 실행(Run): 만들어진 실행 파일을 실제로 돌리는 것
- F5: 디버깅 실행(중단점/변수 확인 등)
- Ctrl+F5: 디버깅 없이 실행
문법 오류(컴파일 에러) 감각 잡기
- 컴파일러는 “추측”하지 않음, 문법이 틀리면 즉시 실패
- 예: 세미콜론(
;) 누락, 괄호 짝 안 맞음, 타입이 맞지 않음 등
핵심은 다음과 같음.
- 런타임까지 가기도 전에(실행도 하기 전에) 컴파일 단계에서 한번 거름
- 따라서 에러 메시지는 “실행 중 오류”가 아니라 번역 실패 이유인 경우가 많음
C++ vs 파이썬 (왜 게임은 C++을 많이 쓸까?)
| 구분 | 파이썬 | C++ |
|---|
| 비유 | 자동 운전 | 수동 운전 |
| 장점 | 문법 단순, 개발 속도 빠름 | 성능/제어력/메모리 관리에 강함 |
| 단점 | 상대적으로 느릴 수 있음 | 어렵고 실수 여지 큼(대신 강력) |
| 사용처(예) | 웹, 데이터 처리, 간단한 툴 | 게임, OS, 엔진/서버 코어 |
체크 질문 (스스로 답해보기)
- “컴파일”과 “빌드”는 같은 말일까? 다르다면 어디가 더 큰 개념일까?
- 왜 CPU는 소스 코드를 바로 실행하지 못할까?
- F5와 Ctrl+F5의 차이를 한 문장으로 설명할 수 있을까?