Number.MIN_SAFE_INTEGER 는 자바스크립트에서 "안전한" 가장 작은 정수의 값을 나타냅니다. 대략 -9000조 의 값입니다.
공식 문서에서는 이런 값이 나오는 이유를 "JavaScript가 IEEE 754에 기술된 배정밀도 부동소숫점 형식 숫자체계를 사용하기 때문" 이라고 설명하고 있는데요. 깊이 알아두고 싶으시면 참고하셔도 좋을 것 같습니다. 저는 아직 보지 않았습니다..ㅋ
미니멈 값이 있다면 맥시멈 값도 있겠죠. Number.MAX_SAFE_INTEGER 는 자바스크립트에서 "안전한" 가장 큰 정수의 값입니다. 마찬가지로 약 9000조 정도 되는 숫자입니다.
이 값의 이유는 JavaScript가 IEEE 754에 기술된 배정밀도 부동소숫점 형식 숫자체계를 사용하기 때문으로, 이로 인해 -(253 - 1)과 253 - 1 사이의 수만 안전하게 표현할 수 있습니다.
여기서의 안전함이란 정수를 정확하고 올바르게 비교할 수 있음을 의미합니다. 예를 들어 Number.MAX_SAFE_INTEGER + 1 === Number.MAX_SAFE_INTEGER + 2는 참으로 평가되며 이는 수학적으로 올바르지 않습니다.
위에서 소개한 두 개의 공식 문서에서는 "안전" 이라는 표현을 사용하고 있습니다. 그리고 안전하다는 것이 정수를 정확하고 올바르게 비교할 수 있다는 것을 의미한다고 말하고 있죠. 쉽게 말해서 자바스크립트에서 앞서 말한 약 9000조가 되는 숫자의 범위를 벗어나는 수를 사용하게 되면 엄밀하고 정확한 비교가 어렵다는 것입니다.
근데 정말 그런가 싶어서 개발자도구에서 9007199254740991
와 9007199254740991 * 2
를 각각 변수에 할당해서 비교를 해봤는데, 비교가 잘 되더라구요. 관련해서 조금 더 알아보니 100%의 정밀도를 보장하지 못한다는 의미라고 합니다. 무조건 안 된다는 개념은 아닌 것이죠.
물론 9천조가 넘는 숫자를 쓸 일은 일반적으로 없을 거라고 생각합니다. 그냥 이 정도 범위까지가 안전하구나 알아두는 정도면 충분하지 않을까 싶네요.