2026. 3. 11. 23:03ㆍBook Review
1. 프로그래밍과 문제 해결 능력
프로그래밍에서 가장 중요한 능력 중 하나는 문제 해결 능력이다.
일부 사람들은 문제 해결 능력을 단순히 알고리즘 능력과 동일하게 생각하지만, 실제로는 그보다 더 넓은 개념이다.
알고리즘은 문제 해결을 위한 절차나 방법을 의미하지만, 문제 해결 능력은 다음과 같은 과정을 포함한다.
- 문제를 정확하게 이해한다.
- 해결 방법을 설계한다.
- 이를 컴퓨터가 이해할 수 있도록 표현한다.
즉, 문제를 분석하고 해결 방안을 설계하는 능력 전체가 문제 해결 능력이다.
2. 프로그래밍이란 무엇인가
프로그래밍은 결국 다음 과정을 수행하는 것이다.
- 사람이 이해하는 요구사항을
- 컴퓨터가 이해할 수 있는 형태로 변환하는 과정
컴퓨터는 사람의 언어를 이해하지 못하기 때문에, 개발자는 요구사항을 프로그래밍 언어로 표현해야 한다.
예를 들어 다음과 같은 요구사항이 있다고 가정하자.
요구사항
두 숫자를 더해서 결과를 출력한다
이를 자바스크립트 코드로 표현하면 다음과 같다.
const a = 10;
const b = 20;
const result = a + b;
console.log(result);
여기서 개발자가 한 일은 다음과 같다.
- 문제를 이해했다. (두 숫자를 더한다)
- 해결 방법을 설계했다. (덧셈 연산)
- 이를 자바스크립트 코드로 표현했다.
3. 컴퓨터가 코드를 이해하는 과정
개발자가 작성한 코드는 그대로 컴퓨터가 이해할 수 있는 것은 아니다.
중간에 번역 과정이 필요하다.
이때 사용하는 것이 다음과 같은 프로그램이다.
- 컴파일러
- 인터프리터
컴파일러
컴파일러는 전체 코드를 한 번에 번역해서 실행 가능한 코드로 변환한다.
대표적인 언어
- C
- C++
작동 과정
소스 코드 → 컴파일 → 실행 파일 → 실행
인터프리터
인터프리터는 코드를 한 줄씩 읽어가며 바로 실행한다.
대표적인 언어
- JavaScript
- Python
작동 과정
소스 코드 → 인터프리터 → 한 줄씩 실행
자바스크립트는 기본적으로 인터프리터 방식으로 동작하는 언어다.
(실제로는 현대 엔진에서 JIT 컴파일도 사용하지만 개념적으로는 인터프리터 언어로 분류된다.)
JIT(Just-In-Time) 컴파일
- 프로그램 실행 시점(Runtime)에 코드를 기계어로 컴파일하는 기술
- 인터프리터 언어의 느린 실행 속도를 개선하기 위해 사용됨
- 자주 실행되는 코드를 실행 중에 기계어로 컴파일하여 이후 실행 속도를 높임
- node.js에서도 사용됨
4. 문법적으로는 맞지만 의미적으로 틀린 코드
자바스크립트는 동적 타입 언어이다.
따라서 변수에 어떤 타입의 값이든 할당할 수 있다.
예를 들어 다음 코드를 보자.
let number = "10";
이 코드는 문법적으로는 전혀 문제가 없다.
하지만 의미적으로는 적절하지 않을 수 있다.
왜냐하면 변수 이름이 number인데 실제 값은 문자열이기 때문이다.
즉,
변수 이름 → number
실제 값 → 문자열
이 경우 코드를 읽는 사람에게 혼란을 줄 수 있다.
더 올바른 코드는 다음과 같다.
let number = 10;
또는 문자열이라면 변수 이름을 명확하게 바꿔야 한다.
let numberString = "10";
5. 왜 이런 문제가 생기는가
Q1. 왜 자바스크립트에서는 이런 코드가 허용될까?
그 이유는 자바스크립트가 동적 타입 언어이기 때문이다.
동적 타입 언어에서는 변수의 타입이 선언 시점이 아니라 실행 시점에 결정된다.
예시
let value = 10; // number
value = "hello"; // string
value = true; // boolean
하나의 변수에 여러 타입의 값이 들어갈 수 있다.
이것이 가능한 이유는 변수에 타입이 있는 것이 아니라 값에 타입이 있기 때문이다.
즉
정적 타입 언어
변수 → 타입을 가짐
동적 타입 언어
값 → 타입을 가짐
Q2. 그렇다면 이런 자유로움이 항상 좋은가?
장점
- 유연한 코드 작성 가능
- 빠른 개발 가능
단점
- 타입 실수 발생 가능
- 런타임 오류 증가
예시
let number = "10";
let result = number + 5;
console.log(result);
결과
105
왜냐하면 자바스크립트는 문자열과 숫자를 더하면 문자열 결합을 수행하기 때문이다.
Q3. 왜 문자열 결합이 발생할까?
자바스크립트의 + 연산자는 두 가지 역할을 한다.
- 숫자 덧셈
- 문자열 결합
연산 과정에서 문자열이 하나라도 포함되면 문자열 결합이 된다.
예시
10 + 5 // 15
"10" + 5 // "105"
"10" + "5" // "105"
즉 내부적으로 다음과 같은 일이 발생한다.
"10" + 5
→ 5를 문자열로 변환
→ "10" + "5"
→ "105"
이 과정을 암묵적 타입 변환 (Implicit Coercion) 이라고 한다.
6. 프로그래밍의 본질
결국 프로그래밍은 다음 과정을 의미한다.
- 요구사항을 분석한다.
- 이를 해결할 자료구조와 함수를 설계한다.
- 프로그램의 흐름을 제어한다.
정리하면 다음과 같다.
요구사항 분석
↓
자료구조 설계
↓
함수 설계
↓
프로그램 흐름 제어
↓
코드 구현
요구사항
사용자의 나이를 입력받아 성인인지 판별한다
코드
function isAdult(age) {
if (age >= 19) {
return true;
}
return false;
}
console.log(isAdult(20)); // true
이 코드에는 다음 요소들이 포함되어 있다.
자료구조
age (숫자 데이터)
함수
isAdult()
흐름 제어
if 조건문
참고 자료
- 모던 자바스크립트 Deep Dive — 이웅모
https://wikibook.co.kr/modern-javascript-deep-dive/
'Book Review' 카테고리의 다른 글
| [모던 자바스크립트 Deep Dive] - 3장 정리 (1) | 2026.03.11 |
|---|---|
| [모던 자바스크립트 Deep Dive] - 2장 정리 (0) | 2026.03.11 |
| Code Complete - 8장 [방어적 프로그래밍] (0) | 2025.11.25 |
| Code Complete - 7장 [고급 루틴] (0) | 2025.11.25 |
| Code Complete - 6장 [클래스 다루기] (0) | 2025.11.25 |