본문 바로가기

프로그래밍/javascript(ES)

자바스크립트 Number.MAX_SAFE_INTEGER Number.MAX_VALUE

자바스크립트는 아주 편리한 언어입니다. 복잡한 실제 프로그램이 아닌 '비교적' 단순한 웹을 위해 만들어졌기에 빠르고 편리하게 이용할수 있습니다. 하지만 이렇게 편리하다는 장점 뒤에는 약간의 단점이 숨어 있는데요. 바로 '정확성'이 떨어지는 상당히 치명적인 단점입니다. 이중 가장 대표적인 것을 소개하자면, 너무나 큰 수가 들어오면 그냥 Infinity가 되버리곤 하는 것입니다.

그래서 자바스크립트에는 수의 최대 한도 이상으로 값을 저장해 값이 손실되는 것을 방지하기 위해서 두가지의 상수가 존재하는데요. 첫번째는 MAX_SAFE_INTEGER이고, 두번째로는 MAX_VALUE가 있습니다. 둘이 어떤 차이점이 있고 어떻게 사용해야 하는지 알아봅시다.

Number.MAX_SAFE_INTEGER

MAX_SAFE_INTEGER는 Number 객체의 정적 상수입니다. 그렇기에 구지 Number 객체를 생성해서 접근할 필요는 없고, Number.MAX_SAFE_INTEGER를 사용하면 됩니다.


console.log(Number.MAX_SAFE_INTEGER);
// 출력 : 9007199254740991

저런식으로 출력을 하면, 9007199254740991라는 값이 뜨게 됩니다. 안전하게 저장할 수 있는 최대값이 저 수입니다. 9007199254740991보다 더 큰 수를 변수에 집어넣어도 저장은 되는데, 그 값을 정확하게 보관할 수 없다는 뜻입니다. (오차발생 가능)


Number.MAX_VALUE

MAX_VALUE도 마찬가지로 Number 객체의 정적 상수입니다.

console.log(Number.MAX_VALUE);
// 출력 : 1.7976931348623157e+308

MAX_VALUE는 위에서 말했던 MAX_SAFE_INTEGER와 다르게 integer형 값의 실제 한도를 나타냅니다. 그 한도를 넘으면 값이 완전히 파손되거나 Infinity로 취급되 버립니다.




자바스크립트에는 숫자의 한계가 있다는 점과, 두가지의 한계점 상수가 있다는 것을 잘 기억해 두어 무리하게 큰 수를 사용하는 프로젝트를 만들어 낭패를 보는 일이 없도록 합시다. 그런식으로 아주 큰 수를 다루는 프로젝트는 JS 말고 다른 언어로 하는 것으로!