Math 빌트인 객체는 함수 섹션 에서도 소개해 드렸듯이 생성자 함수가 아닙니다. 그래서 해당 빌트인 객체의 프로퍼티와 메서드를 사용하고자 할때에는 정적인 형태로서만, 즉 빌트인 객체를 직접 호출하여 작성하는 방법으로 사용되는데요.
이러한 Math 빌트인 객체의 자바스크립트에서의 쓰임새는 정수 및 실수와 같은 숫자 리터럴에 대한 데이터 정재의 목적을 주로 사용됩니다.
그 중 Math 빌트인 객체의 프로퍼티는 Math.PI(원주율), Math.E(자연 상수) 외에는 크게 없기 때문에 정적 메서드에 주목할 필요가 있습니다. 다음은 Math 빌트인 객체의 메서드들 입니다.
매개변수로 전달 된 요소를 절대값으로 변경합니다. 숫자로 변환 가능한 데이터의 경우 타입 캐스팅으로 처리되며, 대표적으로 문자열 안의 숫자리터럴 형태의 데이터나 음수를 절대값으로 변환할 때 사용됩니다.
반면 유니코드 데이터로 타입 캐스팅이 가능할 것 같은 문자 리터럴의 경우 해당 메서드를 사용시 NaN을 반환합니다.
let num1 = '123'; let num2 = -123; let num3 = -'A'; console.log(Math.abs(num1)); // 123 console.log(Math.abs(num2)); // 123 console.log(Math.abs(num3)); // NaN
전달 된 인수의 실수 부분 첫번째를 반올림 하여 정수로 변환시킵니다. 5 미만의 실수 까지는 반올림이 안되고, 5 이상부터 반올림이 되며 첫번째 실수 부분만 적용됩니다.
또한 음의 정수를 round로 처리할 경우 6 이상인 실수 부분부터 반내림이 적용되어 더 작은 값으로 반환됩니다.
let num1 = 1.1; let num2 = 1.5; let num3 = 1.49; let num4 = -1.5; let num5 = -1.6; console.log(Math.round(num1)); // 1 console.log(Math.round(num2)); // 2 console.log(Math.round(num3)); // 1 console.log(Math.round(num4)); // -1 console.log(Math.round(num5)); // -2
1 이상의 실수가 존재할 경우 무조건 올림 처리를 하는 메서드 입니다. 음의 실수의 경우에도 올림 처리가 진행되며, 이 경우 정수 부분이-1 만큼 값이 작아집니다.
let num1 = 1.1; let num2 = 1.5; let num3 = 1.49; let num4 = -1.1; let num5 = -1.6; console.log(Math.ceil(num1)); // 2 console.log(Math.ceil(num2)); // 2 console.log(Math.ceil(num3)); // 3 console.log(Math.ceil(num4)); // -1 console.log(Math.ceil(num5)); // -1
ceil 메서드와 반대로 무조건 내림 처리를 하는데, 양의 실수일 경우 해당 실수 자리만 버리고, 음의 실수일 경우 정수 부분이 -1 만큼 작아집니다.
let num1 = 1.1; let num2 = 1.5; let num3 = 1.49; let num4 = -1.1; let num5 = -1.6; console.log(Math.floor(num1)); // 1 console.log(Math.floor(num2)); // 1 console.log(Math.floor(num3)); // 1 console.log(Math.floor(num4)); // -2 console.log(Math.floor(num5)); // -2
전달 된 매개변수의 제곱근을 반환합니다. 단 양의 정수에만 적용되며, 음의 정수에 대해서는 자바스크립트에서 실수에 대한 음의 제곱근을 제공하지 않기 때문에 NaN을 반환합니다.
let num1 = 9; let num2 = 5; let num3 = 1.49; let num4 = 1; let num5 = -1.6; console.log(Math.sqrt(num1)); // 3 console.log(Math.sqrt(num2)); // 2.23606797749979 console.log(Math.sqrt(num3)); // 1.2206555615733703 console.log(Math.sqrt(num4)); // 1 console.log(Math.sqrt(num5)); // NaN
0부터 1 사이의 랜덤한 실수를 반환합니다. 만약 해당 메서드로 특정 범위의 정수 범위에서 랜덤한 숫자로 반환하고자 한다면 다음과 같이 작성면 됩니다.
let num1 = Math.floor(Math.random()*10) + 1 // Math.random을 호출하면 0 부터 1 사이의 랜덤값을 생성할텐데, 이때 10을 곱하여 실수 부분의 첫자리를 올려주고 floor 메서드로 그 나머지 실수 부분을 다 없애줍니다. 그리고 1을 더하는 이유는 0부터 1까지의 실수를 생성할 때 사실상 실수 부분은 0부터 9 까지의 숫자가 생성이 되기 때문에 1을 더하여 10을 추가하는 개념으로 보시면 될 것 같습니다. let min = sc.nextInt(); let max = sc.nextInt(); let num2 = Math.floor(Math.random()*(max - min + 1)) + min // 만약 특정 범위를 지정하고 싶다면 위의 코드와 같이 [(Math.random()*(값의 끝 범위 - 시작 범위 = 1) + 시작 범위] 형식으로 작성해 주시면 되겠습니다. console.log(num1); console.log(num2);
주어진 매개 변수 중 첫번째 매개변수는 정수를, 두번째 매개 변수는 해당 정수를 거듭 제곱할 횟수를 지정하여 거듭제곱을을 구현한 메서드 입니다.
두번째 매개변수의 값이 양수일 경우 첫번째 매개변수를 거듭제곱 하고, 음수일 경우 역수로 계산됩니다.
또한 이 메서드의 경우 제곱 연산자(**)를 이용해서도 거듭제곱을 출력할 수 있습니다.
let num1 = 5; console.log(Math.pow(num1, 5)); // 5의 5제곱인 3125를 출력 console.log(Math.pow(num1, -5)); // 5의 5승인 0.00031999999999999997를 출력 console.log(num1 ** 5); //
주어진 매개변수들 중 가장 큰 값을 반환합니다. 매개변수들 중 정수로 타입 캐스팅이 가능한 값들은 타입캐스팅 후 값의 비교가 진행 됩니다.
또한 배열중 가장 큰 값을 출력하고자 할 경우 스프레드 연산자로 분해를 해준 후 진행하면 됩니다.
let num1 = 5; let num2 = 10; let num3 = '50'; let arr1 = [1,2,3,4,5]; let arr2 = [10,20,30,40,50]; console.log(Math.max(num1, num2, num3)); // 매개변수들을 비교할 때 num3의 값을 래퍼 객체로 임시 변환시킨 후 그 중 가장 큰 값인 num3의 50을 출력 console.log(Math.max(...arr1, ...arr2)); // 스프레드 연산자를 사용하여 배열 arr1과 arr2를 분해한 후 그 중에서 가장 큰 값을 반환
주어진 매개변수들 중 가장 작은 값을 반환합니다. 이하 설명은 max 메서드와 같습니다.
let num1 = 5; let num2 = 10; let num3 = '50'; let arr1 = [1,2,3,4,5]; let arr2 = [10,20,30,40,50]; console.log(Math.min(num1, num2, num3)); // 5 출력 console.log(Math.min(...arr1, ...arr2)); // 1 출력
⭐ max와 min 메서드에 매개변수를 전달하지 않으면 max의 반환값은 초기값인 음의 무한대(-Infinity)를 반환하고, min의 반환값은 초기값인 양의 무한대)Infinity)를 반환합니다.