2 분 소요

자바스크립트 Math 객체는 난수 생성부터 삼각함수·로그 계산까지 모든 수학 연산을 책임지는 내장 도구입니다. new 연산자 없이 정적(static) 메소드로 바로 호출할 수 있어, 코드가 간결하면서도 강력합니다.


Math 객체란? — 생성자 없는 수학 전용 유틸리티

  • 생성자 없음new Math()
  • 정적 메소드·상수Math.min(), Math.PI 처럼 즉시 사용
  • 브라우저·Node.js 모두 지원하는 표준 API

실수·정수 간 구분 없이 모든 숫자를 64비트 부동소수점으로 처리하므로, 부동소수점 오차(0.1 + 0.2 ≠ 0.3)가 발생할 수 있음에 유의하세요.


가장 많이 쓰는 Math 메소드

분류 메소드 기능 요약 사용 예
최솟값 Math.min() 가장 작은 값 Math.min(1, -5, 3)-5
최댓값 Math.max() 가장 큰 값 Math.max(1, -5, 3)3
난수 Math.random() 0 ≤ x < 1 Math.random()0.123…
반올림 Math.round() 4.5↑ 올림, 4.4↓ 버림 Math.round(4.6)5
올림/내림 Math.ceil() / Math.floor() 소수점 ↑↓ Math.ceil(4.1)5Math.floor(4.9)4
삼각함수 Math.sin() 라디안 입력 Math.sin(Math.PI/2)1

🎲 난수 생성 — 범위 지정 공식

// min 이상 max 미만 랜덤
function getRandom(min, max) {
  return Math.random() * (max - min) + min;
}
console.log(getRandom(10, 20)); // 10 ≤ x < 20

TIP : 정수 난수가 필요하면 Math.floor() 또는 Math.round()를 조합하세요.


반올림·절댓값·거듭제곱 — 실전 계산 메소드

메소드 설명 예시
Math.abs(x) 절댓값 Math.abs(-7)7
Math.pow(x, y) xʸ 거듭제곱 Math.pow(2,3)8
Math.sqrt(x) / Math.cbrt(x) √x / ∛x Math.sqrt(9)3
Math.trunc(x) 소수점 제거 Math.trunc(3.14)3
Math.sign(x) 부호 (-1, 0, 1) Math.sign(-10)-1
Math.hypot(...a) 피타고라스 Math.hypot(3,4)5

삼각함수·역함수·각도 변환

// 삼각함수 (라디안)
Math.sin(Math.PI / 2); // 1
Math.cos(0); // 1
Math.tan(Math.PI / 4); // 1

// 역삼각함수
Math.asin(1); // 1.570796…
Math.acos(0); // 1.570796…
Math.atan(1); // 0.785398…

// 각도 → 라디안
const deg = 90;
const rad = deg * (Math.PI / 180);

라디안·도(degree)를 혼동하지 않도록 변환 공식을 기억하세요.


로그·지수 계산 메소드

메소드 설명 예시
Math.log(x) ln(x) Math.log(Math.E)1
Math.log10(x) log₁₀(x) Math.log10(1000)3
Math.log2(x) log₂(x) Math.log2(8)3
Math.exp(x) Math.exp(1)2.718…

Math 상수 모음

상수 의미 값(대략)
Math.PI π 3.14159
Math.E 오일러 상수 2.71828
Math.SQRT2 √2 1.41421
Math.SQRT1_2 1/√2 0.70711
Math.LN2 ln 2 0.69314
Math.LN10 ln 10 2.30259
Math.LOG2E log₂ e 1.44269
Math.LOG10E log₁₀ e 0.43429

실전 활용 팁 5가지

  1. 정규분포 랜덤Box–Muller 공식으로 Math.random() 두 번 호출
  2. 통계 계산Math.min/Math.max(...arr) + 스프레드 문법
  3. 소수점 오차 보정 → 반올림 Math.round(value * 100) / 100
  4. 부동소수점 검사Number.isSafeInteger() + Math.trunc() 조합
  5. FPS 계산1000 / deltaTime 반올림으로 실시간 프레임 표시

요약 테이블

카테고리 대표 메소드
비교 Math.min(), Math.max()
반올림 round(), ceil(), floor()
난수 random()
지수·거듭제곱 pow(), exp()
루트 sqrt(), cbrt()
삼각함수 sin(), cos(), tan()
로그 log(), log10(), log2()
상수 Math.PI, Math.E, …

질문 정리

  1. Math.random()으로 “정수” 난수를 얻으려면?

    // 0 이상 n 이하 정수
    const randInt = Math.floor(Math.random() * (n + 1));
    
  2. 부동소수점 오차를 줄이는 가장 쉬운 방법은?

    스케일링 기법—정수로 변환해 연산 후 다시 나누기—을 사용하거나, toFixed() 로 출력 값을 보정하세요.

  3. Math.pow() 대신 거듭제곱 연산자( * )를 써도 되나요?

    네, ES2016 이상 환경에선 x ** y 가 더 간결하고 성능도 동일합니다.

  4. 라디안-도 변환을 반복 계산하면 느려지나요?

    변환 자체는 단순 곱셈·나눗셈이라 부담이 적지만, 반복 호출 시 상수(180/π) 를 변수에 캐싱하면 미세 성능을 개선할 수 있습니다.

  5. Math 객체를 직접 확장해도 괜찮을까요?

    가능하지만 전역 충돌 위험이 큽니다. Math.myFunc = … 보다는 유틸 모듈 또는 클래스 내부에 정의하는 방법을 추천합니다.

카테고리:

업데이트:

댓글남기기