💻 프로그래밍이란 무엇인가?
— 코드를 넘어 본질을 이해하다
핵심 요약: 프로그래밍은 단순히 코드를 타이핑하는 일이 아니다.
현실의 문제를 논리로 분해하고, 컴퓨터가 이해할 수 있는 언어로 번역하는 소통과 사고의 과정이다.
1️⃣ 프로그래밍의 정의
프로그래밍(Programming) 이란 컴퓨터에게 특정 작업을 수행하도록 논리적인 명령어의 집합(프로그램)을 설계하고 작성하는 과정이다.
인간의 아이디어
│
▼
논리적 사고로 분해
│
▼
프로그래밍 언어로 표현
│
▼
컴파일러/인터프리터가 번역
│
▼
0과 1(기계어)로 변환 → 컴퓨터 실행
2️⃣ 프로그래밍의 3단계
코드를 작성하는 것은 프로그래밍의 일부일 뿐이다.
| 단계 | 이름 | 하는 일 |
|---|---|---|
| 1 | 설계 (Thinking) | 문제를 정의하고 해결 순서(알고리즘)를 논리적으로 구성 |
| 2 | 구현 (Coding) | 설계한 알고리즘을 프로그래밍 언어 문법으로 작성 |
| 3 | 실행 (Execution) | 코드를 기계어로 변환해 하드웨어에서 동작시킴 |
💡 현업에서 많은 시간이 걸리는 것은 1단계 설계다.
좋은 설계 없이 빠르게 작성한 코드는 기술 부채(Technical Debt)가 된다.
3️⃣ 프로그래밍 언어 — 인간과 컴퓨터의 통역사
컴퓨터는 하드웨어 수준에서 0과 1(비트) 만 이해한다.
인간이 0과 1로 직접 복잡한 프로그램을 짜는 것은 사실상 불가능하다.
그래서 프로그래밍 언어라는 중간 다리가 필요하다.
언어의 수준별 분류
| 구분 | 종류 | 특징 |
|---|---|---|
| 저급 언어 | 기계어, 어셈블리어 | 하드웨어에 가까움, 실행 빠름, 작성 어려움 |
| 고급 언어 | Java, Python, C++ | 인간 언어에 가까움, 작성 쉬움, 번역 과정 필요 |
번역 방식: 컴파일러 vs 인터프리터
| 구분 | 컴파일러 (Compiler) | 인터프리터 (Interpreter) |
|---|---|---|
| 번역 시점 | 실행 전 전체 번역 | 실행 중 한 줄씩 번역 |
| 실행 속도 | 빠름 | 상대적으로 느림 |
| 대표 언어 | Java (JVM 바이트코드), C, C++ | Python, JavaScript |
💡 Java는 두 단계를 거친다:
소스코드(.java)→ javac(컴파일러) →바이트코드(.class)→ JVM(인터프리터/JIT) → 기계어 실행
4️⃣ 프로그래밍 = 추상화하는 능력
문법을 외우는 것은 프로그래밍의 시작일 뿐이다.
진정한 프로그래밍 실력은 현실의 복잡한 문제를 어떻게 논리로 분해하느냐에 달려 있다.
현실 문제: "쇼핑몰에서 재고가 없으면 주문을 막아야 한다"
│
▼ 추상화
if (stock <= 0) {
throw new OutOfStockException("재고 부족");
}
프로그래밍의 핵심 사고 능력
| 능력 | 의미 | 예시 |
|---|---|---|
| 추상화 | 복잡한 현실을 단순하게 모델링 | 현실의 "사람"을 Person 클래스로 표현 |
| 분해 | 큰 문제를 작은 단위로 쪼갬 | 주문 기능을 검증 → 결제 → 재고차감으로 분리 |
| 알고리즘 | 문제를 해결하는 최적의 절차 | 정렬, 탐색, 최단 경로 등 |
| 패턴 인식 | 반복되는 구조를 발견하고 재사용 | 디자인 패턴, 공통 모듈화 |
5️⃣ 왜 메모리와 컴퓨터 구조를 배우는가?
메모리 계층 구조, 가상 메모리, 캐시, 레지스터 같은 지식들은
결국 하나의 본질적인 질문에 답하기 위한 기초다.
"어떻게 하면 더 빠르고, 안정적이며, 유지보수하기 쉬운 프로그램을 만들 것인가?"
메모리 구조 이해
→ Heap/Stack 올바른 사용
→ 메모리 누수(Memory Leak) 방지
→ GC 튜닝으로 성능 최적화
캐시 원리 이해
→ 캐시 친화적 데이터 구조 선택
→ 불필요한 RAM 접근 최소화
→ 대용량 처리 성능 향상
가상 메모리 이해
→ JVM 메모리 옵션(-Xmx) 올바른 설정
→ Swap 발생 방지
→ 안정적인 서비스 운영
6️⃣ 핵심 정리
프로그래밍 = 설계(Thinking) + 구현(Coding) + 실행(Execution)
= 문제를 논리로 분해하고 컴퓨터에게 전달하는 소통
| 개념 | 한 줄 요약 |
|---|---|
| 프로그래밍 | 문제를 논리로 분해해 컴퓨터가 실행할 명령어로 만드는 과정 |
| 프로그래밍 언어 | 인간과 컴퓨터 사이의 통역사 |
| 컴파일러 | 소스코드 전체를 기계어로 번역 (Java, C) |
| 인터프리터 | 소스코드를 한 줄씩 실행 (Python, JS) |
| 핵심 역량 | 문법 암기가 아닌, 문제를 추상화하고 논리로 분해하는 사고력 |