제목
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
- *소프트웨어 개발자** (특히 JavaScript 및 수학적 에러 처리에 관심 있는 중급 이상 개발자)
- *난이도 관점**: 중급 이상 (구체적인 코드 예제와 수학적 개념 포함)
핵심 요약
- 0의 위험성:
0 / 0 = NaN
,2 / 0 = Infinity
등 수학적 특성으로 인해 예기치 못한 오류 발생 - 실제 문제 사례:
Divide-by-zero
예외,Falsy
값의 조건문 오류,Off-by-one
오류, 배열 인덱스 오류(array[-1]
) - 핵심 해결 전략:
0
의 Falsy 특성과 수학적 불확실성에 대한 인식 강화, 명시적 검증 로직 추가
섹션별 세부 요약
1. **역사적 배경**
- 고대 문명에서 0의 개념이 없었음 (예: 로마 수자
MMXXV
에서 0 없음) - 7세기 인도에서 브라마굽타가 0을 수치와 자리 표시자로 정의하여 수학 혁명 촉진
2. **0의 수학적 특성**
0 / x = 0
→x / 0 = Infinity
또는 런타임 오류0 / 0 = NaN
→ 수학적 불확실성 (1, 42, 피자 조각 등 모든 값 가능)- JavaScript 예제:
```javascript
console.log(0 / 0); // NaN
console.log(2 / 0); // Infinity
```
3. **실제 코드에서의 문제**
- Divide-by-zero 예외: 앱 크래시 유발
- Falsy 값:
if (0)
조건문에서 논리 오류 발생 - Off-by-one 오류:
for (let i = 0; i < array.length; i++)
에서 인덱스 범위 초과 - 배열의 비정상 인덱스:
array[-1]
→ undefined 또는 메모리 오류
4. **0의 숨은 위험**
- 이진 세계의 기반: 모든 데이터는
0
과1
의 조합 - 코드에서의 무시:
0
이 유효한 값이면서도 의도치 않은 오류 유발
결론
- 0의 특성을 인식하고, 0의 검증 로직(예:
if (x === 0)
,Math.abs(x)
,try/catch
)을 추가하여 런타임 오류 방지 - NaN/Infinity 처리 시 isNaN(), isFinite() 함수 활용, 수학적 불확실성 대비 에러 헨들링 강화
- 0의 Falsy 특성을 고려한 조건문 설계(예:
if (value !== 0)
)로 논리 오류 예방