본 포스팅은 JavaScript의 무한대(Infinity)에 대해 설명합니다.
무한대(Infinity)
Infinity는 JavaScript 전역 객체의 프로퍼티로 전역 범위에서 사용할 수 있는 변수다. 전역 객체인 window에 Infinity 프로퍼티가 존재하는지 확인하기 위해 hasOwnProperty()를 사용하면 true를 반환한다.
window.hasOwnProperty('Infinity'); // true
Infinity는 양의 무한대를 의미하며 숫자가 2¹⁰²⁴의 값 이상인 경우 Infinity로 표시한다.
console.log(Math.pow(2, 1023)); // 8.98846567431158e+307
console.log(Math.pow(2, 1024)); // Infinity
반대로 음의 무한대는 Infinity 앞에 마이너스 기호(-)가 붙는다.
console.log(-Math.pow(2, 1024)); // -Infinity
Infinity는 Number 타입의 특수한 값이며, 양의 무한대는 Number.POSITIVE_INFINITY와 동일하고 음의 무한대는 Number.POSITIVE_INFINITY와 동일하다.
console.log(typeof Infinity); // number
console.log(Infinity === Number.POSITIVE_INFINITY); // true
console.log(-Infinity === Number.NEGATIVE_INFINITY); // true
무한대(Infinity) 연산
Infinity도 숫자(Number) 타입이므로 숫자 연산이 가능하다. Infinity에 덧셈(+), 뺄셈(-), 곱셈(*), 나눗셈(/) 연산을 수행하면 동일한 결과를 출력한다.
console.log(Infinity + 100); // Infinity
console.log(Infinity - 100); // Infinity
console.log(Infinity * 100); // Infinity
console.log(Infinity / 100); // Infinity
0이랑 곱셈(*) 연산을 수행하면 0을 반환한다. 수학적으로 0과 곱하면 결과는 항상 0이기 때문이다.
console.log(Infinity * 0); // 0
0이랑 나눗셈(/) 연산을 수행하면 Infinity를 반환한다.
console.log(Infinity * 0); // Infinity
일반적으로 다른 프로그래밍 언어에서는 숫자를 0으로 나누면 수학적으로 의미가 없기에 ArithmeticException이 발생한다. 하지만, JavaScript는 Infinity를 반환하는데 이러한 이유는 A / B를 A에 B를 몇 번 뺄 수 있느냐로 인식하기 때문이다. 무한대에서 0을 무한대로 뺄 수 있으므로 JavaScript는 Infinity를 반환한다.
그러면 Infinity와 Infinity를 연산하면 어떻게 될까?
console.log(Infinity + Infinity); // Infinity
console.log(Infinity - Infinity); // NaN
console.log(Infinity * Infinity); // Infinity
console.log(Infinity / Infinity); // NaN
- 덧셈: A + B에서 A, B 둘 다 양수이므로 양의 무한대를 반환한다.
- 뺄셈: A – B에서 A가 큰지 B가 큰지 알 수 없으므로 NaN을 반환한다.
- 곱셈: A * B에서 A, B 둘 다 양수이므로 양의 무한대를 반환한다.
- 나눗셈: 수학적으로 무한대를 무한대로 나누는 것은 정의되지 않아 연산 결과가 불확정하다. 따라서 어떤 값을 반환해야 하는지 확정할 수 없기에 NaN을 반환한다.
무한대(Infinity)인지 체크하는 방법
숫자가 무한대인지 확인하기 위해 isFinite() 함수를 사용할 수 있는데, isFinite() 함수는 두 가지 버전이 존재한다.
window.isFinite()
전역 객체의 isFinite() 함수는 인수로 전달된 값이 숫자인지 확인하고, 표현할 수 있는 숫자인 경우 true를 반환한다. 인수로 전달된 값이 숫자가 아니거나 Infinity, -Infinity, NaN과 같이 특수한 값이면 false를 반환한다.
console.log(isFinite(100)); // true
console.log(isFinite("100")); // true
console.log(isFinite("ABC")); // false
console.log(isFinite("Infinity")); // false
console.log(isFinite(Infinity)); // false
Number.isFinite()
Number.isFinite() 함수는 인수로 전달된 값이 숫자인지 확인하지만, 타입을 변환하지는 않는다. 따라서 인수가 숫자가 아닐 경우 항상 false를 반환한다.
console.log(Number.isFinite(100)); // true
console.log(Number.isFinite("100")); // false
console.log(Number.isFinite("ABC")); // false
console.log(Number.isFinite("Infinity")); // false
console.log(Number.isFinite(Infinity)); // false
Conclusion
JavaScript에서 Infinity는 무한대를 나타내는 특별한 값이다. 어떤 숫자보다 큰 값을 의미하고 마이너스 기호(-)가 붙은 경우 어떤 숫자보다 작은 값을 의미한다.
참고
- [JavaScript]무한대(Infinity)란?
- JavaScript Infinity
- Infinity in JavaScript
- What is Infinity in JavaScript?
- 0으로 나누기